一尘不染

Fillna在Python Pandas中的多列中

python

我有一个混合类型的pandas dataFrame,有些是字符串,有些是数字。我想用“。”替换字符串列中的NAN值,并用0替换浮点数列中的NAN值。

考虑这个小的虚拟示例:

df = pd.DataFrame({'Name':['Jack','Sue',pd.np.nan,'Bob','Alice','John'],
    'A': [1, 2.1, pd.np.nan, 4.7, 5.6, 6.8],
    'B': [.25, pd.np.nan, pd.np.nan, 4, 12.2, 14.4],
    'City':['Seattle','SF','LA','OC',pd.np.nan,pd.np.nan]})

现在,我可以分为三行:

df['Name'].fillna('.',inplace=True)
df['City'].fillna('.',inplace=True)
df.fillna(0,inplace=True)

由于这是一个很小的数据帧,因此3行可能没问题。在我的真实示例中(由于数据机密性原因,在此无法共享),我还有更多的字符串列和数字列。所以我最终只为fillna写了很多行。有一种简洁的方法吗?


阅读 236

收藏
2021-01-20

共1个答案

一尘不染

你可以使用apply你的列有检查dtype它是否是numeric或不检查dtype.kind

res = df.apply(lambda x: x.fillna(0) if x.dtype.kind in 'biufc' else x.fillna('.'))

print(res)
     A      B     City   Name
0  1.0   0.25  Seattle   Jack
1  2.1   0.00       SF    Sue
2  0.0   0.00       LA      .
3  4.7   4.00       OC    Bob
4  5.6  12.20        .  Alice
5  6.8  14.40        .   John
2021-01-20