无法在pandas中通过lambda填充多列中的NaN值
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法在pandas中通过lambda填充多列中的NaN值相关的知识,希望对你有一定的参考价值。
我试图在我的DataFrame all_files_d
中填充所有浮点列NaN值为0,然后将其放入空列表或称为ts
的DataFrame中。
我的数据样本如下:
ColX ColY
56.9 6.4
67.5 NaN
NaN 8.9
NaN NaN
我试图按照这个问题代码,因为它似乎对一些用户有效,但似乎有NaN值,它没有填充任何东西:
Fillna in multiple columns in place in Python Pandas
这是我的代码:
ts = []
all_files_d.apply(lambda x: x.fillna(0, inplace = True) if x.dtype.kind
in 'f' else x.fillna('.', inplace = True), axis = 1)
ts.append(all_files_d)
我希望得到以下结果,所有NaN都填充0.感谢提前。
ColX ColY
56.9 6.4
67.5 0
0 8.9
0 0
任何帮助,将不胜感激。
答案
使用combine_first
和pd.to_numeric()
:
测试(添加额外的字符串列):
df['Colz']=['abc',np.nan,'def',np.nan]
print(df)
ColX ColY Colz
0 56.9 6.4 abc
1 67.5 NaN NaN
2 NaN 8,9 def
3 NaN NaN NaN
df.combine_first(df.apply(lambda x:
pd.to_numeric(x,errors='coerce')).dropna(how='all',axis=1).fillna(0))
产量
ColX ColY Colz
0 56.9 6.4 abc
1 67.5 0 NaN
2 0.0 8,9 def
3 0.0 0 NaN
编辑,用于获取浮点型和填充NaN:
m=df.select_dtypes('float').columns
df.loc[:,m]=df.loc[:,m].fillna(0)
print(df)
另一答案
达蒙;
ts = df.apply(lambda x: x.fillna(0) if x.dtypes == float else x.fillna('.'))
ColX ColY
0 56.9 6.4
1 67.5 0.0
2 0.0 8.9
3 0.0 0.0
另一答案
使用df.select_dtype()
# fillna to float64 columns
ts = df.select_dtypes(include=['float64']).fillna(0)
# merge data
df.join(ts, lsuffix="_").reindex(df.columns, axis=1)
以上是关于无法在pandas中通过lambda填充多列中的NaN值的主要内容,如果未能解决你的问题,请参考以下文章
pandas 将excel中的一列文本数据拆分成多列 如何操作