質問編集履歴
2
プログラム内に記載ミスがあったため修正しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -64,7 +64,7 @@
|
|
64
64
|
#ラベルエンコーディング
|
65
65
|
df4 = []
|
66
66
|
|
67
|
-
for c in
|
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 =
|
75
|
+
df5 = pd.DataFrame(df4, index = list_head)
|
76
76
|
|
77
77
|
#代入(行と列が逆だったため転置)
|
78
78
|
for i in list_head():
|
1
プログラムの追記を行いました。
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
|
+
```
|