问题描述
我有一个混合类型的pandas dataFrame,有些是字符串,有些是数字.我想用'.'替换字符串列中的NAN值,并用0替换浮点列中的NAN值.
I have a pandas dataFrame of mixed types, some are strings and some are numbers. I would like to replace the NAN values in string columns by '.', and the NAN values in float columns by 0.
考虑这个小的虚拟示例:
Consider this small fictitious example:
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]})
现在,我可以分为3行:
Now, I can do it in 3 lines:
df['Name'].fillna('.',inplace=True)
df['City'].fillna('.',inplace=True)
df.fillna(0,inplace=True)
由于这是一个很小的数据帧,所以3行可能就可以了.在我的实际示例(由于数据机密性的原因,在此无法共享)中,我还有更多的字符串列和数字列.所以我最终只为fillna写了很多行.有一个简洁的方法吗?
Since this is a small dataframe, 3 lines is probably ok. In my real example (which I cannot share here due to data confidentiality reasons), I have many more string columns and numeric columns. SO I end up writing many lines just for fillna. Is there a concise way of doing this?
推荐答案
您可以使用dtype是否为numeric
进行检查,并检查 dtype.kind
:
You could use apply
for your columns with checking dtype
whether it's numeric
or not by checking 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
这篇关于Fillna在Python Pandas中的多列中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!