无法在pandas中通过lambda填充多列中的NaN值

问题描述 投票:2回答:3

我试图在我的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

任何帮助,将不胜感激。

python pandas numpy
3个回答
1
投票

使用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)

0
投票

达蒙;

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

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)
© www.soinside.com 2019 - 2024. All rights reserved.