私はこのようなデータを持っています:-
|--------|---------|
| Col1 | Col2 |
|--------|---------|
| X | a,b,c |
|--------|---------|
| Y | a,b |
|--------|---------|
| X | b,d |
|--------|---------|
これらのカテゴリデータをダミー変数に変換したいと思います。私のデータは大きいので、get_dummies()
パンダから使用している場合はメモリエラーが発生します。私はこのような結果が欲しいです:-
|------|------|------|------|------|------|
|Col_X |Col_Y |Col2_a|Col2_b|Col2_c|Col2_d|
|------|------|------|------|------|------|
| 1 | 0 | 1 | 1 | 1 | 0 |
|------|------|------|------|------|------|
| 0 | 1 | 1 | 1 | 0 | 0 |
|------|------|------|------|------|------|
| 1 | 0 | 0 | 1 | 0 | 1 |
|------|------|------|------|------|------|
これを使用してCol2を変換しようとしましたが、データが大きく、col2にも多くの変動があるため、MemoryErrorが発生します。
そう、
1)複数のカテゴリ列をダミー変数に変換するにはどうすればよいですか?
2)pandas get_dummy()がメモリエラーを出しているので、どうすればそれを処理できますか?
私も自分の解決策を示したいと思います。そして、@ James-dellingerの回答に感謝します。これが私のアプローチです
df = pd.DataFrame({'Col1': ['X', 'Y', 'X'],
'Col2': ['a,b,c', 'a,b', 'b,d']})
df
Col1 Col2
0 X a,b,c
1 Y a,b
2 X b,d
最初にCol2値を分割し、それを列値に変換します。
df= pd.DataFrame(df['Col2'].str.split(',',3).tolist(),columns = ['Col1','Col2','Col3'])
df
Col1 Col2 Col3
0 a b c
1 a b None
2 b d None
次に、プレフィックスを付けずにこのデータフレームにダミー作成を適用しました。
df=pd.get_dummies(df, prefix="")
df
_a _b _b _d _c
0 1 0 1 0 1
1 1 0 1 0 0
2 0 1 0 1 0
これで、目的の結果を取得するために、重複するすべての列を合計できます。
df.groupby(level=0, axis=1).sum()
df
_a _b _c _d
0 1 1 1 0
1 1 1 0 0
2 0 1 0 1
Col1の場合、を使用してダミー変数を直接作成しpd.get_dummies()
、それを別のデータフレームに格納できますcol1_df
。を使用して両方の列を連結できますpd.concat([df,col1_df], axis=1, sort=False)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加