使用时read_csv
对于 Pandas,如果我想要将给定的列转换为类型,格式错误的值将中断整个操作,而不会指示有问题的值。
例如,运行如下内容:
import pandas as pd
import numpy as np
df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 })
将导致堆栈跟踪以错误结束:
ValueError: cannot safely convert passed user dtype of <i8 for object dtyped data in column ...
如果我有行号或错误消息中的违规值,我可以将其添加到已知的列表中NaN
价值观,但这样我就无能为力了。
有没有办法告诉解析器忽略失败并返回np.nan
在这种情况下?
Post Scriptum:有趣的是,在解析后没有任何类型建议(没有dtype
争论),d['my_column'].value_counts()
似乎推断出dtype
右并放置np.nan
自动正确,即使实际dtype
因为该系列是通用的object
几乎所有绘图和统计操作都会失败
感谢评论,我意识到整数没有 NaN http://pandas.pydata.org/pandas-docs/stable/gotchas.html#support-for-integer-na,这让我非常惊讶。因此我转而转换为浮点数:
import pandas as pd
import numpy as np
df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 })
这给了我一个可以理解的错误消息,其中包含失败转换的值,以便我可以将失败值添加到na_values
:
df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 }, na_values=['n/a'])
这样我最终可以以与可视化和统计功能配合使用的方式导入 CSV:
>>>> df['session_planned_os'].dtype
dtype('float64')
一旦你能够找到正确的na_values
,您可以删除dtype
论证来自read_csv
。类型推断现在将正确发生:
df = pd.read_csv('my.csv', na_values=['n/a'])
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)