我正在读取一个大型平面文件,其中包含多列的带时间戳的数据。数据有一个 bool 值列,可以是 True/False 或可以没有条目(计算结果为 nan)。
当读取 csv 时,bool 列被类型转换为对象,这会由于序列化错误而阻止将数据保存在 hdfstore 中。
示例数据:
A B C D
a 1 2 true
b 5 7 false
c 3 2 true
d 9 4
我用下面的命令读取
import pandas as pd
pd.read_csv('data.csv', parse_dates=True)
一个解决方案是在读取 csv 时指定数据类型,但我希望有一个更简洁的解决方案,例如 convert_objects,我可以在其中指定 parse_numeric 或 parse_dates。
最佳答案
由于您的 csv 中缺少值,因此列的 dtype 显示为对象,因为您混合了 dtype,前 3 行值为 bool 值,最后一行值为 float 。
要转换 NaN
值使用 fillna
,它接受一个字典来映射所需的填充值和列并产生一个同质的数据类型:
>>> t = """
A B C D
a 1 NaN true
b 5 7 false
c 3 2 true
d 9 4 """
>>> df = pd.read_csv(io.StringIO(t),sep='\s+')
>>> df
A B C D
0 a 1 NaN True
1 b 5 7 False
2 c 3 2 True
3 d 9 4 NaN
>>> df.fillna({'C':0, 'D':False})
A B C D
0 a 1 0 True
1 b 5 7 False
2 c 3 2 True
3 d 9 4 False
关于python - pandas: read_csv 如何强制 bool 数据 dtype bool 而不是对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29739894/