使用字典在熊猫栏中填充NaN

时间:2019-07-02 15:22:57

标签: python pandas dataframe nan

有没有一种方法可以使用不包含所有列的字典来映射列值。例如:

比方说我的数据框是:

 A    B    C    D    E    F
nan  nan  nan  nan  nan  nan

,我有一本字典,想用作映射器:

d = {'A': 1, 'B': 1, 'E': 1}

因此输出应将字典中不存在的那些值替换为0

A    B    C    D    E    F
1    1    0    0    1    0

1 个答案:

答案 0 :(得分:3)

最惯用的选择是使用两个fillna通话,

df.fillna(d).fillna(0, downcast='infer')
df

   A  B  C  D  E  F
0  1  1  0  0  1  0

piRSquared建议使用assign作为第一个fillna通话的替代方式,

df.assign(**d).fillna(0, downcast='infer')
df

   A  B  C  D  E  F
0  1  1  0  0  1  0

另一种选择是在列上使用Index.isin。这是单行形式:

df[:] = [df.columns.isin(d.keys()).astype(int)]

要归纳为N行,我们使用repeat

df[:] = df.columns.isin(d.keys()).astype(int)[None,:].repeat(len(df), axis=0)
df

   A  B  C  D  E  F
0  1  1  0  0  1  0

为了娱乐,您还可以使用reindex

pd.DataFrame(d, index=df.index).reindex(df.columns, axis=1, fill_value=0)

   A  B  C  D  E  F
0  1  1  0  0  1  0