Python 1.0作为布尔数据类型导致pd.read_csv()中出现ValueError
我有一个CSV文件,类似于下面的一个文件,我想将“boolean_column”读取为带有pandas的可空布尔数据类型Python 1.0作为布尔数据类型导致pd.read_csv()中出现ValueError,python,pandas,csv,Python,Pandas,Csv,我有一个CSV文件,类似于下面的一个文件,我想将“boolean_column”读取为带有pandas的可空布尔数据类型 boolean_column, string_column 1.0, a 0.0, b ,c 当我使用pd.read\u csv()阅读它而不指定数据类型时,不会出现错误: 导入io 作为pd进口熊猫 示例_csv=”“” 布尔列,字符串列 1.0,a 0.0,b ,c“” csv=io.StringIO(示例_csv) df=pd.read\U csv(csv) df.i
boolean_column, string_column
1.0, a
0.0, b
,c
当我使用pd.read\u csv()
阅读它而不指定数据类型时,不会出现错误:
导入io
作为pd进口熊猫
示例_csv=”“”
布尔列,字符串列
1.0,a
0.0,b
,c“”
csv=io.StringIO(示例_csv)
df=pd.read\U csv(csv)
df.info()
>>>
范围索引:3个条目,0到2
数据列(共2列):
#列非空计数数据类型
--- ------ -------------- -----
0布尔值_列2非空浮点64
1字符串\u第3列非空对象
数据类型:浮点64(1),对象(1)
内存使用:176.0+字节
但是,我希望“boolean_column”具有可为空的boolean数据类型,而不是float64。因此,我在读取数据时分配了一个数据类型
csv=io.StringIO(示例_csv)
df=pd.read\u csv(csv,dtype={“boolean\u列”:“boolean”})
>>>ValueError:无法将1.0转换为布尔值
我认为立即分配正确的数据类型比事后强制转换float64更优雅。我没有得到什么?这应该管用,对吧
至少这样做:
pd.Series([None,1.0,0.0]).astype(“boolean”)
>>> 0
1正确
2错误
数据类型:布尔型
我不熟悉解决这个问题的read\u csv
现成功能。但是,您可以构建自己的转换器:
def foo(x):
if x == "1.0":
return True
elif x == "":
return np.NaN
else:
return False
pd.read_csv(StringIO(example_csv), converters = {"boolean_column": foo})
结果是:
boolean_column string_column
0 True a
1 False b
2 NaN c
这回答了你的问题吗?