如何过滤含列表值的DataFrame:筛选C列不含'b'的行
筛选DataFrame中列表列不含指定元素的行
问题背景
你的DataFrame结构如下(C列存储列表):
A B C x 3 ['a',1,2,'b'] y 2 ['c',4,6,'b'] z 1 ['d',5,7,'e']
需要筛选出C列中不含'b'的行,预期结果仅保留最后一行。
解决方案
步骤1:读取CSV并转换C列为实际列表类型
CSV文件中存储的列表本质是字符串格式,需要先转换成Python列表:
import pandas as pd import ast # 读取CSV文件 df = pd.read_csv('your_file.csv') # 将C列的字符串形式列表转为实际列表 df['C'] = df['C'].apply(ast.literal_eval)
步骤2:筛选目标行
由于df.query更适合处理原生数值/字符串列,针对列表列的筛选,用apply配合lambda表达式更直接:
# 筛选C列不含'b'的行 filtered_df = df[df['C'].apply(lambda lst: 'b' not in lst)]
执行后filtered_df的结果即为:
A B C z 1 ['d', 5, 7, 'e']
补充说明
如果一定要用df.query,可以先创建一个辅助标记列,再通过query筛选:
# 添加辅助列标记是否不含'b' df['has_no_b'] = df['C'].apply(lambda lst: 'b' not in lst) # 用query筛选 filtered_df = df.query('has_no_b == True').drop('has_no_b', axis=1)
内容的提问来源于stack exchange,提问作者ANISH GAIKWAD
相关产品推荐
相关产品推荐

