我想将pandas.Series
分解为其他几列(列数=值数),保存该因子分解并将其与其他DataFrame
或Series
一起使用。像pandas.get_dummies
之类的东西会记住映射并可以处理NaN
。
实施例。
鉴于以下DataFrame
:
A B
0 a 0
1 b 1
2 a 2
3 c 3
我希望将系列A
分解为:
A_a A_b A_c B
0 1 0 0 0
1 0 1 0 1
2 1 0 0 2
3 0 0 1 3
然后我想保存该分解并将其应用于其他DataFrame
(外观输入在A列中没有 c 值):
A B A_a A_b A_c B
0 a 0 0 1 0 0 0
1 a 1 -> 1 1 0 0 1
2 b 2 2 0 1 0 2
这种事情有自动方式吗?我可以手动完成。
我正在尝试scikit-learn LabelEncoder,但它无法处理NaN
。我想将它用于分类模型。
答案 0 :(得分:1)
我认为没有办法自动执行此操作:
In [11]: res = df.pop("A").str.get_dummies() # Note: pop removes column A from df
In [12]: res.columns = res.columns.map(lambda x: "A_" + x)
In [13]: res
Out[13]:
A_a A_b A_c
0 1 0 0
1 0 1 0
2 1 0 0
3 0 0 1
In [14]: res.join(df)
Out[14]:
A_a A_b A_c B
0 1 0 0 0
1 0 1 0 1
2 1 0 0 2
3 0 0 1 3
要标准化,我会在您想要的列上使用reindex_axis
。即强制df2具有df1列。
df2.reindex_axis(df1.columns, axis=1, fill_value=0)