dan*_*nza 6 python csv data-processing pandas
在使用read_csvPandas时,如果我希望将给定列转换为类型,则格式错误的值将中断整个操作,而不会显示有问题的值.
例如,运行类似于:
import pandas as pd
import numpy as np
df = pd.read_csv('my.csv', dtype={ 'my_column': np.int64 })
Run Code Online (Sandbox Code Playgroud)
将导致以错误结束的堆栈跟踪:
ValueError: cannot safely convert passed user dtype of <i8 for object dtyped data in column ...
Run Code Online (Sandbox Code Playgroud)
如果我有错误消息中的行号或违规值,我可以将它添加到已知NaN值列表中,但这样我就无能为力了.
有没有办法告诉解析器忽略失败并np.nan在这种情况下返回?
Post Scriptum:有趣的是,在解析后没有任何类型的建议(没有dtype参数),d['my_column'].value_counts()似乎推断出dtype正确并np.nan自动正确放置,即使dtype系列的实际是一般的object,几乎每个绘图和统计操作都会失败
感谢评论,我意识到整数没有NaN,这对我来说非常令人惊讶.因此我切换到转换为浮动:
import pandas as pd
import numpy as np
df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 })
Run Code Online (Sandbox Code Playgroud)
这给了我一个可理解的错误消息,其中包含失败转换的值,因此我可以将失败的值添加到na_values:
df = pd.read_csv('my.csv', dtype={ 'my_column': np.float64 }, na_values=['n/a'])
Run Code Online (Sandbox Code Playgroud)
这样我最终可以用可视化和统计功能的方式导入CSV:
>>>> df['session_planned_os'].dtype
dtype('float64')
Run Code Online (Sandbox Code Playgroud)
一旦你能够找到正确的na_values,你可以从中删除dtype参数read_csv.类型推断现在将正确发生:
df = pd.read_csv('my.csv', na_values=['n/a'])
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2753 次 |
| 最近记录: |