我有一个混合类型的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写了很多行。有一种简洁的方法吗?
你可以使用apply你的列有检查dtype它是否是numeric或不检查dtype.kind:
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