前提
Pythonを用いて機械学習のデータ前処理を行っています。
もとのデータセットから文字列を要素に含む列を取り出し、ラベルエンコーディングを施しデータの前処理を行いました。
ラベルエンコーディングを施したdataframeを、もとのdataframeに代入したものを新しく保存して学習に使用しようと考えています。
列名が完全一致した箇所に代入する方法を調べてもなかなか出ず、「列の要素に新しい要素を代入する」方法しか見つけられませんでした。
また、元データが98532行×1031列存在しており、元データから列名を直接指定してのラベルエンコーディングが難しくこのような手段を採用しました。
どなたか教えていただけますと幸いです。
実現したいこと
- ラベルエンコーディング済dataframeを、前処理を施す前のdataframeに上書き
元データ例
abc | def | ghi | klm | |
---|---|---|---|---|
1 | 12 | 34 | abc | 56 |
2 | 78 | 90 | abc | 56 |
3 | 45 | 67 | def | 56 |
前処理をしたデータ例
文字列を要素に含むghi列を抽出
ghi | |
---|---|
1 | 1 |
2 | 1 |
3 | 2 |
実現したいデータ例
abc | def | ghi | klm | |
---|---|---|---|---|
1 | 12 | 34 | 1 | 56 |
2 | 78 | 90 | 1 | 56 |
3 | 45 | 67 | 2 | 56 |
+α
文字列で構成された要素を持つ列の列名を配列に格納する方法はわかるのですが、それを用いて別のdataframeを経由せず、直接ラベルエンコーディングを行う方法も知りたいです。
この場で聞くのも場違いとは思いますが、教えていただけると幸いです。
2022/4/12 追記
こちらの方法で実装できると思っていたのですが、
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
という警告が出、最後の確認でも更新されていませんでした。
情報量0の列を削除して得られたデータを1度CSVファイルとして書き出し、それを再度読み込んで代入をしたほうがいいのでしょうか?
Python
1#インポート 2import pandas as pd 3 4#ファイル読み込み 5df1 = pd.read_csv('data.csv',low_memory=False) 6 7#情報量0の列を削除 8df2 = df1.loc[:,~(df1.nunique() == 1)] 9 10#文字列を含む列取り出し 11df3 = df2.filter(regex = '[a-zA-Z]+',axis = 'columns') 12 13#ヘッダをリストで格納 14list_head = df3.columns.tolist() 15 16#ラベルエンコーディング 17df4 = [] 18 19for c in list_head: 20 print(c) 21 le = LabelEncoder() 22 le.fit(df3[c]) 23 print(df3[c]) 24 df4.append(le.transform(df3[c])) 25 26#dataframe形式に変換 27df5 = pd.DataFrame(df4, index = list_head) 28 29#代入(行と列が逆だったため転置) 30for i in list_head(): 31 df2[i] = df5.T[i] 32 33#中身確認 34df2.head()
回答1件
あなたの回答
tips
プレビュー