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

如何基于指定代码列表过滤含字符串形式列表列的DataFrame?

处理包含字符串格式数值列表的DataFrame过滤需求

解决步骤

  1. 解析字符串格式的列表:使用ast.literal_eval将AISPREDOT列的字符串转为实际的Python列表,该方法能安全解析合法的字符串化数据结构。
  2. 过滤目标行:通过apply结合any()函数,检查每行的列表是否包含codes中的至少一个元素,筛选出符合条件的行生成新DataFramedf2。

完整代码示例

import pandas as pd
import ast

# 示例输入:以INC_KEY为索引的df1
data = {
    'AISPREDOT': [
        "[110402.0, 123456.0]",
        "[789012.0, 854362.0]",
        "[345678.0, 987654.0]",
        "[110402.0, 854362.0]"
    ]
}
df1 = pd.DataFrame(data, index=['INC001', 'INC002', 'INC003', 'INC004'])

# 1. 将字符串列表转为实际列表
df1['AISPREDOT'] = df1['AISPREDOT'].apply(ast.literal_eval)

# 2. 定义目标代码列表并过滤
codes = [110402.0, 854362.0]
df2 = df1[df1['AISPREDOT'].apply(lambda x: any(code in x for code in codes))]

# 查看结果
print(df2)

示例输出

AISPREDOT
INC001  [110402.0, 123456.0]
INC002  [789012.0, 854362.0]
INC004  [110402.0, 854362.0]

异常处理补充

如果AISPREDOT列存在格式不规范的字符串(比如多余空格、语法错误),可以添加安全解析函数避免崩溃:

def safe_parse_list(s):
    try:
        return ast.literal_eval(s)
    except (SyntaxError, ValueError):
        return []

df1['AISPREDOT'] = df1['AISPREDOT'].apply(safe_parse_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 23:05:17