如何查找pandas DataFrame中列表类型列包含指定字符串的行
pandas筛选列表类型列包含指定值的行的实现方法
因为Addresses列存储的是列表对象,直接用等于判断无法匹配列表内的元素,你可以用以下两种方法实现需求:
- 方法1:使用
apply做逐行成员判断(适合中小体量数据)
核心逻辑是逐行读取Addresses列的列表,判断目标值是否属于列表成员:
如果存在列表元素类型不统一的情况,可以加一步类型转换避免匹配失败:df1 = df[df['Addresses'].apply(lambda x: 'ei102' in x)]df1 = df[df['Addresses'].apply(lambda x: 'ei102' in [str(item) for item in x])] - 方法2:使用
explode拆分后匹配(适合大体量数据,性能更优)
先把列表列的每个元素拆分为独立行,匹配到目标值后通过索引回溯原数据行:target_val = 'ei102' matched_index = df.explode('Addresses').query("Addresses == @target_val").index df1 = df[df.index.isin(matched_index)]
完整测试示例
import pandas as pd # 构造和示例一致的测试数据 df = pd.DataFrame({ "ID": [3920, 3029], "Name": ["Chris", "Jane"], "Addresses": [["ab192", "ei102"], ["pe019", "xi201", "de301"]] }) # 筛选Addresses包含ei102的行 df_result = df[df['Addresses'].apply(lambda x: 'ei102' in x)] print(df_result)
运行后输出结果:
ID Name Addresses 0 3920 Chris [ab192, ei102]
内容的提问来源于stack exchange,提问作者user16599218
相关产品推荐
相关产品推荐

