我想使用pandas.read_csv来推断数据中的布尔类型。
如果我使用dtypes=str,我没有一种简单的方法将我的数据转换回布尔类型,因为下面的方法不能很好地工作。
df['bool_column'].astype(bool).eq(False)我不想推断所有的数据类型,因为我不想丢失数据中的任何整数类型。
这个问题有没有简单的解决方案?
发布于 2017-12-08 05:01:29
对于最新版本,pandas read_csv可以在不指定bool类型的情况下处理此问题。其他更清晰的方法如下:
您可以指定哪个列上的数据类型
d = pandas.read_csv('foo.csv', dtype={'bool_column': 'bool'})或者,您可以通过以下应用程序将特定列转换为bool:
d = df['bool_column'].apply(bool)
or
d = df.bool_column.astype(bool)MaxU提供了一个更好的解决方案。这是另一个解决方案:
df = pandas.read_csv('foo.csv', converters={"bool_column": bool})或
def convert_bool(col):
if str(col) == "true":
return True
elif str(col) == "false":
return False
df = pandas.read_csv('foo.csv', converters={"bool_column": lambda x:convert_bool(x)})以下是我的测试数据:
#foo.csv
col1,col2,col3,col4
false,true,1,hah
true,false,0,haha
false,true,1,haaaaa
false,true,1,hah
true,false,0,haha
false,true,1,haaaaa
false,true,1,hah
true,false,0,haha
false,true,1,haaaaa
false,true,1,hah
pandas.read_csv('test.txt',converters={'col1':lambda x: convert_bool(x),'col2':str}).dtypes
#output
col1 bool
col2 object
col3 int64
col4 object
dtype: object
pandas.read_csv('test.txt',converters={'col1': bool}).dtypes
#output
col1 bool
col2 bool
col3 int64
col4 object
dtype: object发布于 2017-12-08 05:16:28
如果您有not standard values - true and false instead of True and False,您可以执行以下操作:
df['bool_column'] = df['bool_column'].eq('true')https://stackoverflow.com/questions/47703471
复制相似问题