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

如何将Pandas中嵌套列表格式的列转换为Python嵌套列表

解决Pandas字符串格式嵌套列表转Python嵌套列表的问题

方法1:正则替换+ast.literal_eval(推荐,安全)

原始字符串中的元素缺少引号(如a而非'a'),直接解析会被识别为变量而非字符串。我们可以先用正则表达式给所有元素添加单引号,再用ast.literal_eval安全解析为嵌套列表:

import pandas as pd
import ast
import re

data = {
    'col': [
        '[[a, b, c], [a,b]]',
        '[[a, b], [c]]',
        '[[x]]'
    ]
}
df = pd.DataFrame(data)

def str_to_nested_list(s):
    # 给所有非括号、逗号、空格的元素添加单引号
    quoted_str = re.sub(r'([^\[\],\s]+)', r"'\1'", s)
    return ast.literal_eval(quoted_str)

# 转换并得到目标列表
python_list = df['col'].apply(str_to_nested_list).tolist()
print(python_list)

执行后输出:

[[['a', 'b', 'c'], ['a', 'b']], [['a', 'b'], ['c']], [['x']]]

方法2:正则替换+eval(不推荐,存在安全风险)

逻辑和方法1一致,但使用eval替代ast.literal_eval。eval会执行任意代码,仅适用于完全可信的数据源:

import pandas as pd
import re

data = {
    'col': [
        '[[a, b, c], [a,b]]',
        '[[a, b], [c]]',
        '[[x]]'
    ]
}
df = pd.DataFrame(data)

def str_to_nested_list(s):
    quoted_str = re.sub(r'([^\[\],\s]+)', r"'\1'", s)
    return eval(quoted_str)

python_list = df['col'].apply(str_to_nested_list).tolist()

核心说明

  • 正则表达式r'([^\[\],\s]+)'用于匹配所有非括号、逗号、空格的连续字符,也就是需要转换为字符串的元素。
  • ast.literal_eval是Python标准库提供的安全解析工具,仅能解析Python字面量(列表、字典、字符串等),不会执行恶意代码,是优先选择的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 11:36:01