python - pandas: read_csv 如何强制 bool 数据 dtype bool 而不是对象

标签 python pandas

我正在读取一个大型平面文件,其中包含多列的带时间戳的数据。数据有一个 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/

相关文章:

python - 向 100K+ 数据集添加行

Python3 将十六进制值列表转换为字节

python - 后面加*args可以使用默认参数吗?

python - 我需要一个用于 python 中 mp3 文件 url 的 href 属性的正则表达式

python - 在 django rest 框架中对 pandas DataFrame 重复操作

python - 使用分层索引透视表

python - 为什么在 i18n blocktrans (django) 中,对象、字典或列表不起作用?

python - 为什么我的索引从第二行开始?

python 、 Pandas : Using isin() like functionality but do not ignore duplicates in input list

python - 根据python中的条件更新多个列值