Pandas read_csv,读取一个布尔值,缺少值指定为int

时间:2016-12-23 15:49:56

标签: python csv pandas boolean missing-data

我正在尝试将csv导入到pandas数据帧中。我有布尔变量用1' s和0'表示,其中缺失值用-9标识。 当我尝试将dtype指定为boolean时,我会遇到许多不同的错误,具体取决于我尝试的内容。

示例数据:test.csv

var1, var2
0,   0
0,   1
1,   3
-9,  0
0,   2
1,   7

我尝试在导入时指定dtype:

dtype_dict = {'var1':'bool','var2':'int'}
nan_dict = {'var1':[-9]}
foo = pd.read_csv('test.csv',dtype=dtype_dict, na_values=nan_dict)

我收到以下错误:

  

ValueError:无法安全地为int64传递| b1的传递用户dtype   列0中的数据

我也尝试过指定true和false值,

foo = pd.read_csv('test.csv',dtype=dtype_dict,na_values=nan_dict,
                 true_values=[1],false_values=[0])

然后我得到了一个不同的错误:

  

异常:必须是所有编码的字节

错误的源代码说明了偶尔捕获的错误,但是nones或nulls正是我想要的。

2 个答案:

答案 0 :(得分:2)

您可以为converters列指定var1参数:

from io import StringIO
import numpy as np
import pandas as pd

pd.read_csv(StringIO("""var1, var2
0,   0
0,   1
1,   3
-9,  0
0,   2
1,   7"""), converters = {'var1': lambda x: bool(int(x)) if x != '-9' else np.nan})

enter image description here

答案 1 :(得分:0)

你能做这样的事吗?

df=pd.read_csv("test.csv",names=["var1","var2"])
df.ix[df.var1==0,'var1Bool']=False
df.ix[df.var1==1,'var1Bool']=True

你应该为你创建一个新专栏,如果你满意,你可以复制旧专栏。

   var1  var2 var1Bool
0     0     0    False
1     0     1    False
2     1     3     True
3    -9     0      NaN
4     0     2    False
5     1     7     True