如何在数据帧上执行 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)