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