将数据框中的 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】:

如果它们是字符串,则在值上使用replacenp.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 转换为零的主要内容,如果未能解决你的问题,请参考以下文章

为啥空数组类型转换为零? +[]

pyspark 数据框中所有列的总计数为零

Pandas使用列标题作为值将多个列转换/合并为单个列

将列表中的 NaN 值替换为零 (0)

如何将给定的 Excel 文件转换为 Python 中的字典?

将包含字符串和 NAN 的列转换为 Pandas 中的整数列表