Fillna在Python Pandas中的多列中

发布于 2021-01-29 15:09:30

我有一个混合类型的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写了很多行。有一种简洁的方法吗?

关注者
0
被浏览
83
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    你可以使用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
    


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看