如何在数据帧上执行 pd.get_dummies() 同时保持 NA 值而不是创建 NA 列?
How to perform pd.get_dummies() on a dataframe while simultaneously keeping NA values in place instead of creating an NA column?
我有一个包含一些缺失数据的数据集。我想在执行 pd.get_dummies()
.
时保持数据中的缺失
这是一个示例数据集:
Table 1.
someCol
A
B
NA
C
D
我希望 pd.get_dummies(df, dummy_na=True))
将数据转换成这样:
Table 2.
someCol_A someCol_B someCol_NA someCol_C someCol_D
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
但是,我想要的是:
Table 3.
someCol_A someCol_B someCol_C someCol_D
1 0 0 0
0 1 0 0
NA NA NA NA
0 0 1 0
0 0 0 1
请注意,第 3 行用 NA 代替了从原始列中拆分出来的所有行值。
如何才能达到 Table 3 的结果?
有点 hack,但您可以这样做,您只获取非空行的虚拟值,然后通过重新索引将缺失值重新插入到适当的位置通过原始数据帧的索引生成的虚拟人
pd.get_dummies(df.dropna()).reindex(df.index)
someCol_A someCol_B someCol_C someCol_D
0 1.0 0.0 0.0 0.0
1 0.0 1.0 0.0 0.0
2 NaN NaN NaN NaN
3 0.0 0.0 1.0 0.0
4 0.0 0.0 0.0 1.0
@sacuL 基本上提供了答案。以下是我的修改:
df_lister = []
for i in range(len(df.columns)):
df_lister.append(pd.get_dummies(df[df.columns[i]].dropna(), prefix=df.columns[i]).reindex(df[df.columns[i]].index))
df = pd.concat(df_lister, axis=1)
我有一个包含一些缺失数据的数据集。我想在执行 pd.get_dummies()
.
这是一个示例数据集:
Table 1.
someCol
A
B
NA
C
D
我希望 pd.get_dummies(df, dummy_na=True))
将数据转换成这样:
Table 2.
someCol_A someCol_B someCol_NA someCol_C someCol_D
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1
但是,我想要的是:
Table 3.
someCol_A someCol_B someCol_C someCol_D
1 0 0 0
0 1 0 0
NA NA NA NA
0 0 1 0
0 0 0 1
请注意,第 3 行用 NA 代替了从原始列中拆分出来的所有行值。
如何才能达到 Table 3 的结果?
有点 hack,但您可以这样做,您只获取非空行的虚拟值,然后通过重新索引将缺失值重新插入到适当的位置通过原始数据帧的索引生成的虚拟人
pd.get_dummies(df.dropna()).reindex(df.index)
someCol_A someCol_B someCol_C someCol_D
0 1.0 0.0 0.0 0.0
1 0.0 1.0 0.0 0.0
2 NaN NaN NaN NaN
3 0.0 0.0 1.0 0.0
4 0.0 0.0 0.0 1.0
@sacuL 基本上提供了答案。以下是我的修改:
df_lister = []
for i in range(len(df.columns)):
df_lister.append(pd.get_dummies(df[df.columns[i]].dropna(), prefix=df.columns[i]).reindex(df[df.columns[i]].index))
df = pd.concat(df_lister, axis=1)