如何对pandas.Series列进行二进制分解

时间:2015-05-04 21:07:18

标签: python pandas machine-learning scikit-learn

我想将pandas.Series分解为其他几列(列数=值数),保存该因子分解并将其与其他DataFrameSeries一起使用。像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。我想将它用于分类模型。

1 个答案:

答案 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)