EDIT:それでも2つのデータセットが異なる列を持っているときに動作答えを探して!メモリ効率的なホットエンコードパンダ
私は両方のデータセットで特定の列をホットエンコードしようとしています。列は異なるデータセットで異なる値を持つため、単純なホットエンコーディングは異なる列につながります。目的の結果:
DATASET A
col1 col2 target
a 1 1
b 2 2
c 2 3
d 3 3
DATASET B
col1 col2 target
d 2 2
h 4 3
g 2 2
b 3 3
After encoding col 1:
New dataset A
col2 target a b c d h g
1 1 1 0 0 0 0 0
2 2 0 1 0 0 0 0
2 3 0 0 1 0 0 0
3 3 0 0 0 1 0 0
New dataset B
col2 target a b c d h g
2 2 0 0 0 1 0 0
4 3 0 0 0 0 1 0
2 2 0 0 0 0 0 1
3 3 0 1 0 0 0 0
次の実装は機能しますが、メモリが非常に効率が悪く、MemoryErrorsのためにコンピュータが頻繁にクラッシュします。
def hot_encode_column_in_both_datasets(column_name,df,df2,sparse=True,drop_first = True):
print("Hot encoding {} for both datasets".format(column_name))
cols_in_df_but_not_in_df2 = set(df[column_name]).difference(set(df2[column_name]))
cols_in_df2_but_not_in_df = set(df2[column_name]).difference(set(df[column_name]))
dummy_df_to_concat_to_df = pd.DataFrame(0,index=df.index,columns = cols_in_df2_but_not_in_df)
dummy_df_to_concat_to_df2 = pd.DataFrame(0,index=df2.index,columns = cols_in_df_but_not_in_df2)
dummy_df_to_concat_to_df = dummy_df_to_concat_to_df.to_sparse()
dummy_df_to_concat_to_df2 = dummy_df_to_concat_to_df2.to_sparse()
encoded = pd.get_dummies(df[column_name],sparse=sparse)
encoded = pd.concat([encoded,dummy_df_to_concat_to_df],axis = 1)
encoded_2 = pd.get_dummies(df2[column_name],sparse=sparse)
encoded_2 = pd.concat([encoded_2,dummy_df_to_concat_to_df2],axis = 1)
encoded_df = pd.concat([df,encoded],axis=1)
encoded_df2 = pd.concat([df2,encoded_2],axis=1)
del encoded_df[column_name]
del encoded_df2[column_name]
return encoded_df,encoded_df2
これを行うより良い方法はありますか?
ありがとうございました! :)
画像などのデータやコードを入れないで下さい。そうすることで、例のデータを手作業で入力する必要があるため、助けてくれる人には迷惑をかけることになります。 –
@HaleemurAli謝罪、私はそれがよりきれいに見えると思った。今修正しよう! :) – Wboy
あなたの例からは、データセットを1つのホットエンコードに追加してから、インデックスまたはフラグ変数に基づいて事実を分離するように見えます。これがうまくいかない理由はありますか? –