基于多列布尔值更新DataFrame的Verified Account列报错解决
解决DataFrame更新'Verified Account'列的错误问题
首先来说说你出错的原因:你在df.apply()的lambda函数里用了df['Col1']这种写法,这会直接引用整个Col1列的所有数据(一个布尔数组),而不是当前行的单个值。当你尝试把这个数组和标量做or逻辑判断时,Python就会抛出那个类型错误——它没法把数组和单个布尔值做逻辑运算。
下面给你两种可行的解决方案,优先推荐第一种(效率更高):
方法一:用向量化操作(推荐)
这种方法不用逐行循环,利用Pandas的向量化特性,处理大数据集速度快很多:
# 定义需要检查的列列表 check_cols = ['Col1', 'Col2', 'Col3', 'Col4', 'Col5'] # 1. 把每个单元格和'True'比较,得到布尔值矩阵 # 2. 按行判断是否有至少一个True(any(axis=1)) # 3. 把布尔结果转为字符串的'True'/'False' df['Verified Account'] = df[check_cols].eq('True').any(axis=1).astype(str)
方法二:修正apply的写法
如果你一定要用apply,记得在lambda里用x来访问当前行的列值,并且指定axis=1(按行处理):
df['Verified Account'] = df.apply( lambda x: 'True' if x['Col1'] == 'True' or x['Col2'] == 'True' or x['Col3'] == 'True' or x['Col4'] == 'True' or x['Col5'] == 'True' else 'False', axis=1 )
不过这种方法是逐行处理,数据量大的时候性能会比向量化操作差不少。
额外提示
如果你的Col1-Col5实际存储的是布尔类型(不是字符串'True'/'False'),可以简化代码,去掉.eq('True'),直接用df[check_cols].any(axis=1).astype(str)即可。
内容的提问来源于stack exchange,提问作者user12809368
相关产品推荐
相关产品推荐

