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

如何用ast.literal_eval处理Pandas DataFrame列,统一列表格式

处理Pandas中混合格式分类列统一转为列表格式

核心方案

结合ast.literal_eval和批量列处理逻辑,把混合了字符串列表(如"['org1','org2']")和单个值(如"org1")的列,统一转换为列表类型,确保所有记录都是标准列表格式。

步骤实现

  1. 导入依赖库
import pandas as pd
import ast
  1. 定义通用处理函数
    自动识别并转换不同格式的输入值:
  • 若输入是可解析为列表的字符串,用ast.literal_eval转成真实列表
  • 若输入是单个值(非列表格式字符串),直接包裹为单元素列表
def convert_to_list(value):
    if isinstance(value, str):
        # 快速判断是否为列表格式字符串(可根据数据实际格式调整)
        if value.startswith('[') and value.endswith(']'):
            try:
                return ast.literal_eval(value)
            except (SyntaxError, ValueError):
                # 解析失败时将原内容转为单元素列表,避免程序中断
                return [value.strip()]
        else:
            return [value.strip()]
    # 非字符串类型直接处理:已是列表则返回,否则包裹为列表
    return value if isinstance(value, list) else [value]
  1. 筛选需要处理的列
    遍历所有列,定位那些包含至少一个列表格式字符串的列(避免处理无关列,比如示例中的Class列):
# 假设你的DataFrame名为df
target_cols = []
for col in df.columns:
    # 检查列中是否存在列表格式的字符串
    has_list_format = df[col].str.startswith('[').any()
    if has_list_format:
        target_cols.append(col)
  1. 批量应用转换逻辑
    对筛选出的目标列统一执行转换:
df[target_cols] = df[target_cols].applymap(convert_to_list)

验证效果

转换完成后,可通过以下代码确认结果:

# 查看第一行Category列的第一个元素
print(df['Category'][0][0])  # 输出 'org1'
# 查看第三行Category列的第一个元素
print(df['Category'][2][0])  # 输出 'org1'

优化说明

  • 若处理超大规模数据,applymap的效率可能不足,可尝试用numpy.vectorize包装处理函数,但ast.literal_eval本身无法完全向量化,建议先抽样验证数据格式后再批量处理。
  • 函数中的try-except块用于兼容格式不规范的列表字符串(如括号不匹配),保证转换流程不中断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:20:25