【发布时间】:2017-05-27 05:14:50
【问题描述】:
编辑:仍在寻找当两个数据集具有不同列时有效的答案!
我正在尝试同等对两个数据集中的特定列进行热编码。该列在不同的数据集中具有不同的值,因此简单的热编码会导致不同的列。预期结果:
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 抱歉,我认为它让它看起来更干净。我现在就修! :)
-
从您的示例看来,您可以只附加数据集、一个热编码,然后根据索引或标志变量在事后分离。这有什么原因不起作用吗?