Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 1.0作为布尔数据类型导致pd.read_csv()中出现ValueError_Python_Pandas_Csv - Fatal编程技术网

Python 1.0作为布尔数据类型导致pd.read_csv()中出现ValueError

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

我有一个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.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

这回答了你的问题吗?