将数据框中的 NaN 转换为零
Posted
技术标签:
【中文标题】将数据框中的 NaN 转换为零【英文标题】:Converting NaN in dataframe to zero 【发布时间】:2018-08-04 00:53:52 【问题描述】:我有字典并使用创建熊猫 汽车 = pd.DataFrame.from_dict(cars_dict, orient='index') 和 对索引进行排序(按字母顺序排列的列 汽车 = cars.sort_index(axis=1) 排序后我注意到 DataFrame 有 NaN 我不确定 如果真的 np.nan 值? print(cars.isnull().any()) 并且所有列都显示为假。
我尝试了不同的方法将这些“NaN”值转换为零,这是我想要做的,但它们都不起作用。 我尝试过替换和填充方法,但没有任何效果 以下是我的数据框示例..
speedtest size
toyota 65 NaN
honda 77 800
【问题讨论】:
df[np.isnan(df)] = 0
df=df.fillna(0) 如果不起作用,请尝试 df=df.replace('NaN',0)
我刚刚选择了 df.replace('NaN', 0) 效果很好。谢谢。
【参考方案1】:
如果它们是字符串,则在值上使用replace
或np.where
:
df = df.replace('NaN', 0)
或者,
df[:] = np.where(df.eq('NaN'), 0, df)
或者,如果它们实际上是 NaN(这似乎不太可能),则使用 fillna
:
df.fillna(0, inplace=True)
或者,要同时处理这两种情况,请使用apply
+ pd.to_numeric
(稍慢但保证在任何情况下都能正常工作):
df = df.apply(pd.to_numeric, errors='coerce').fillna(0, downcast='infer')
感谢 piRSquared 提供这个!
【讨论】:
广义:df.apply(to_numeric, errors='coerce').fillna(0, downcast='infer')
【参考方案2】:
@cs95 的回答在这里不起作用。
必须将 numpy 导入为 np 并使用 replace 和 np.Nan 和 inplace = True
import numpy as np
df.replace(np.NaN, 0, inplace=True)
然后所有的列都得到 0 而不是 NaN。
【讨论】:
以上是关于将数据框中的 NaN 转换为零的主要内容,如果未能解决你的问题,请参考以下文章