質問編集履歴

2

プログラム内に記載ミスがあったため修正しました。

2022/04/12 21:52

投稿

rikku_3413
rikku_3413

スコア11

test CHANGED
File without changes
test CHANGED
@@ -64,7 +64,7 @@
64
64
  #ラベルエンコーディング
65
65
  df4 = []
66
66
 
67
- for c in category:
67
+ for c in list_head:
68
68
  print(c)
69
69
  le = LabelEncoder()
70
70
  le.fit(df3[c])
@@ -72,7 +72,7 @@
72
72
  df4.append(le.transform(df3[c]))
73
73
 
74
74
  #dataframe形式に変換
75
- df5 = pd.DataFrame(df4, index = category)
75
+ df5 = pd.DataFrame(df4, index = list_head)
76
76
 
77
77
  #代入(行と列が逆だったため転置)
78
78
  for i in list_head():

1

プログラムの追記を行いました。

2022/04/12 07:58

投稿

rikku_3413
rikku_3413

スコア11

test CHANGED
File without changes
test CHANGED
@@ -40,3 +40,44 @@
40
40
  文字列で構成された要素を持つ列の列名を配列に格納する方法はわかるのですが、それを用いて別のdataframeを経由せず、直接ラベルエンコーディングを行う方法も知りたいです。
41
41
  この場で聞くのも場違いとは思いますが、教えていただけると幸いです。
42
42
 
43
+ ### 2022/4/12 追記
44
+ こちらの方法で実装できると思っていたのですが、
45
+ A value is trying to be set on a copy of a slice from a DataFrame. Try using .loc[row_indexer,col_indexer] = value instead
46
+ という警告が出、最後の確認でも更新されていませんでした。
47
+ 情報量0の列を削除して得られたデータを1度CSVファイルとして書き出し、それを再度読み込んで代入をしたほうがいいのでしょうか?
48
+ ```Python
49
+ #インポート
50
+ import pandas as pd
51
+
52
+ #ファイル読み込み
53
+ df1 = pd.read_csv('data.csv',low_memory=False)
54
+
55
+ #情報量0の列を削除
56
+ df2 = df1.loc[:,~(df1.nunique() == 1)]
57
+
58
+ #文字列を含む列取り出し
59
+ df3 = df2.filter(regex = '[a-zA-Z]+',axis = 'columns')
60
+
61
+ #ヘッダをリストで格納
62
+ list_head = df3.columns.tolist()
63
+
64
+ #ラベルエンコーディング
65
+ df4 = []
66
+
67
+ for c in category:
68
+ print(c)
69
+ le = LabelEncoder()
70
+ le.fit(df3[c])
71
+ print(df3[c])
72
+ df4.append(le.transform(df3[c]))
73
+
74
+ #dataframe形式に変換
75
+ df5 = pd.DataFrame(df4, index = category)
76
+
77
+ #代入(行と列が逆だったため転置)
78
+ for i in list_head():
79
+ df2[i] = df5.T[i]
80
+
81
+ #中身確認
82
+ df2.head()
83
+ ```