如何将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
相关产品推荐
相关产品推荐

