You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么pandas无法对列表指定的列执行子集筛选操作

报错信息
ValueError: Unable to coerce to Series, length must be 10: given 2
错误原因
  • 维度匹配错误:你直接对10列的DataFrame执行!= prohibited_symbols操作,pandas无法将长度为2的列表和10列的结构做逐元素对比,触发维度不匹配报错
  • 列表定义笔误:prohibited_symbols = ['?','Nan''n.a']中'Nan'和'n.a'之间遗漏了逗号,两个字符串会被自动拼接为Nann.a,所以你定义的列表实际只有2个元素,刚好对应报错里的given 2
  • 索引逻辑错误:即使没有前面的问题,多列布尔矩阵也不能直接用来索引原DataFrame的行,会返回缺失值填充的异常结果
修正代码

如果你要剔除所有包含指定异常值的行,可参考以下实现:

import pandas as pd
df = pd.read_csv("/Volumes/SSD/IT/DataSets/Automobile_data.csv")
print(df.shape)
columns_df  = ['index', 'company', 'body-style', 'wheel-base', 'length', 'engine-type',
       'num-of-cylinders', 'horsepower', 'average-mileage', 'price']
# 补全逗号,修正异常值列表
prohibited_symbols = ['?','Nan','n.a']
# 取反筛选:保留所有列都没有异常值的行
df = df[~df[columns_df].isin(prohibited_symbols).any(axis=1)]
print(df)
逻辑说明
  • df[columns_df].isin(prohibited_symbols)返回和选中列同维度的布尔矩阵,元素为True代表该位置值属于异常值
  • any(axis=1)逐行判断,只要该行有任意一个元素为True就返回True,代表该行存在异常值
  • ~是布尔取反运算符,最终筛选出不存在异常值的行

内容的提问来源于stack exchange,提问作者Ruslan Pylypiuk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:27:02