Python多列条件过滤问题:过滤含1的行触发ValueError错误
解决DataFrame过滤包含1的行时的ValueError问题
嘿,我来帮你搞定这个报错!咱们先搞清楚你代码出问题的原因,再给你靠谱的解决方案。
错误原因分析
你写的df_1[df_1.columns[0:5] == 1]其实是在拿前5列的列名和数字1做比较,而不是比较列里的数值。比如如果你的列名是类似col0、col1这种字符串,那这个比较会返回一个长度为5的布尔数组(比如[False, False, False, False, False]),但你的DataFrame有111249行,索引的时候要求布尔数组的长度和行数一致,这就导致了ValueError: Item wrong length 2 instead of 111249这个错误。
正确解决方案
根据你“过滤出所有包含1的行”的需求,这里分两种常见场景给出代码:
场景1:只要行中至少有一个1(前5列里任意一列是1就保留)
这应该是你最需要的情况,用any()方法检查每行是否存在True(也就是值为1):
df_2 = df_1[df_1.iloc[:, 0:5].any(axis=1)]
df_1.iloc[:, 0:5]:准确选取DataFrame的前5列(避免列名干扰)any(axis=1):按行检查,只要该行有至少一个值为1(True),就返回True- 最后用这个长度和行数一致的布尔数组来索引DataFrame,就能得到所有包含1的行
场景2:行中前5列全部都是1(可选补充)
如果你需要的是前5列全为1的行,就用all()方法:
df_2 = df_1[df_1.iloc[:, 0:5].all(axis=1)]
all(axis=1):按行检查,只有当该行所有值都是1(True)时,才返回True
内容的提问来源于stack exchange,提问作者Josue Barrantes
相关产品推荐
相关产品推荐

