首页 > 解决方案 > pandas 将任何值转换为 bool(缺失或零)

问题描述

在 python 中,编写类似的东西是没有问题的

if a: ...

即使a是整数(例如 0)或字符串(例如空字符串),在这种情况下,它也会被强制转换为 false。

然而

dtype_dict = {'type': str, 'exclude_trial':bool}
data = pd.read_csv(filename, sep='\t', dtype=dtype_dict)

返回警告

ValueError: cannot safely convert passed user dtype of bool for object dtyped data in column 26

这是完全不清楚和非常烦人的。

“exclude_trial”列包含值“”(空字符串)或“0”或“1”。当然,它应该只是按照正常行为简单地铸造,否则也是通常的。('','0' -> 假,1->真)

标签: pythonpandasdataframecasting

解决方案


读取数据后,您可以.astype(bool)在 DataFrame 上使用bool(x)x 是每个单元格中的值的等价物进行转换。

但是,您需要非常小心。pandas有很多自动 NaN 处理,这意味着空字符串通常会被读入并强制为 NaN,这和while is一样bool('')是有问题的。即使指定 dtype 也不能防止这种情况,但您可以使用它来确保它不会更改空字符串。Falsebool(np.NaN)Truena_filter

样本数据: test.txt

col1,col2,col3
True,1,
False,0,
True,1,1

df = pd.read_csv('test.txt', na_filter=False)
#    col1  col2 col3
#0   True     1     
#1  False     0     
#2   True     1    1

df = df.astype(bool)
#    col1   col2   col3
#0   True   True  False
#1  False  False  False
#2   True   True   True

df.dtypes
#col1    bool
#col2    bool
#col3    bool

推荐阅读