无法在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_firstpd.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值的主要内容,如果未能解决你的问题,请参考以下文章

在python中通过MySQL进行迭代的问题

如何在 SQL 中通过多列连接两个表?

在CDK中通过ARN将事件源添加到Lambda

pandas 将excel中的一列文本数据拆分成多列 如何操作

如何在没有 lambda 函数的 React Native 中通过单个处理程序处理几个 TextInput?

Python中通过lambda抛异常的奇迹淫巧