Pandas read_csv,阅读指定为int的缺少值的布尔值

9wbgstp7  于 2023-04-09  发布在  其他
关注(0)|答案(3)|浏览(92)

我试图将csv导入到pandas数据框中。我有一个布尔变量,用1和0表示,缺失的值用-9标识。当我试图将dtype指定为布尔时,我会得到一系列不同的错误,具体取决于我的尝试。
样本数据: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:无法安全地转换传递的用户dtype|b1用于第0列中的int 64 dtyped数据
我还尝试指定true和false值,

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

但是我得到了一个不同的错误:
异常:必须是所有编码字节
这个错误的源代码说了一些关于捕获偶尔的none的内容,但是nones或null正是我想要的。

4urapxun

4urapxun1#

可以为var1列指定converters参数:

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})

hsgswve4

hsgswve42#

你能做这样的事吗?

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
huus2vyu

huus2vyu3#

发生错误Must be all encoded bytes是因为解析器需要字符串,而不是数字作为值。
你的true/false值应该像这样指定:

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

相关问题