防止 pandas 将 None 读为 Nan

Posted

技术标签:

【中文标题】防止 pandas 将 None 读为 Nan【英文标题】:Prevent pandas from reading None as Nan 【发布时间】:2017-06-21 00:55:04 【问题描述】:

我清理了一个数据集,不得不用None 替换很多NaN 值。之后我将它保存到一个新的 csv 文件中,当我使用pandas.read_csv 读取清理后的数据集时,所有None 值都表示为NaN,我该如何避免这种情况?

【问题讨论】:

在 read_csv 中使用 na_filter=False 带有nan 的列可以具有浮点数据类型。带有None 的一个将是object dtype。计算会比较慢。 【参考方案1】:

您可以在read_csv 中使用参数keep_default_nana_values,然后将replace 字符串None 用于值None

import pandas as pd
from pandas.compat import StringIO

temp=u"""a,b
None,NaN
a,8"""
#after testing replace 'StringIO(temp)' to 'filename.csv'
df = pd.read_csv(StringIO(temp),keep_default_na=False,na_values=['NaN'])

print (df)
      a    b
0  None  NaN
1     a  8.0

print (type(df.a.iloc[0]))
<class 'str'>

df = df.replace('None':None)
print (df)
      a    b
0  None  NaN
1     a  8.0

print (type(df.a.iloc[0]))
<class 'NoneType'>

【讨论】:

以上是关于防止 pandas 将 None 读为 Nan的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 pandas 将原始数据库日期格式转换为 pandas 日期格式

Pandas 数据框到嵌套字典,名称空间为 None

在 Pandas DataFrame 中用 None 替换无效值

如何防止 pandas.to_datetime() 函数将 0001-01-01 转换为 2001-01-01

防止 Pandas to_json() 将时间组件添加到日期对象

pandas 笔记:合并操作