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

如何在Pandas中基于列内列表值筛选DataFrame行?

嘿,我完全懂你碰到的这个麻烦!直接用列表和DataFrame的列做相等判断确实会踩坑,因为Pandas会默认把右侧的列表当成和列长度一致的序列来逐元素匹配,而不是检查每个行里的列表是否和目标列表完全相等,这就导致了那个长度不匹配的错误。

别担心,有几个比手动遍历高效得多的解决方案:

方法1:用apply()逐行判断列表相等

这是最直接的方式,利用apply()对list_value列的每个元素做相等判断,返回布尔值来筛选行:

import pandas as pd

df = pd.DataFrame([['text1', [1,2,3]], ['text2', [2,3,4]]], columns=['text','list_value'])
# 筛选list_value等于[1,2,3]的行
filtered_df = df[df['list_value'].apply(lambda x: x == [1,2,3])]
print(filtered_df)

运行后会得到你想要的结果:

text list_value
0  text1  [1, 2, 3]

方法2:转成元组后直接匹配(更高效)

列表是不可哈希的,没法直接作为Pandas的比较对象,但元组可以。我们可以把列表列转成元组,然后直接用等于判断:

# 链式调用,无需新增列
filtered_df = df[df['list_value'].apply(tuple) == (1,2,3)]

# 如果需要重复使用,也可以新增一列元组列
df['tuple_value'] = df['list_value'].apply(tuple)
filtered_df = df.loc[df['tuple_value'] == (1,2,3)]

这个方法的性能比apply(lambda x: x == ...)更好,尤其是当你的DataFrame行数很多的时候。

为什么原来的代码会报错?

你之前写的df.loc[df['list_value'] == [1,2,3]],Pandas会把右侧的[1,2,3]当成一个长度为3的序列,而你的list_value列只有2个元素(两行),所以它尝试逐位置匹配时就会抛出Arrays were different lengths: 2 vs 3的错误——它根本没理解你是要检查每个行的列表是否等于目标列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:08:59