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

如何将含array值的字符串字典列表转换为Pandas DataFrame?

解决字符串字典列表转Pandas DataFrame的问题

问题核心

你的列表元素是带引号的字符串格式字典,且字典值是array([x])格式,直接转换会生成单列数据,用ast.literal_eval或eval时会因array未定义报错。

解决方案

方法1:正则替换提取数值(推荐,更安全)

先把字符串里的array([x])替换成纯数值,再转成字典,最后生成DataFrame:

import re
import ast
import pandas as pd

# 示例输入列表
str_dicts = [
    "{'A': array([1]), 'B': array([2]), 'C': array([3])}",
    "{'A': array([4]), 'B': array([5]), 'C': array([6])}",
    "{'A': array([7]), 'B': array([8]), 'C': array([9])}"
]

def parse_str_dict(s):
    # 替换array([x])为x的数值部分
    cleaned_str = re.sub(r'array\(\[(\d+)\]\)', r'\1', s)
    # 转换为Python字典
    return ast.literal_eval(cleaned_str)

# 批量处理所有字符串字典
dict_list = [parse_str_dict(s) for s in str_dicts]
# 生成DataFrame
df = pd.DataFrame(dict_list)
print(df)

输出结果:

A  B  C
0  1  2  3
1  4  5  6
2  7  8  9

方法2:在eval中引入numpy.array(保留数组结构可选)

如果需要保留numpy数组类型(或值不是单元素数组),可以在eval时传入包含array的命名空间:

import numpy as np
import pandas as pd

str_dicts = [
    "{'A': array([1]), 'B': array([2]), 'C': array([3])}",
    "{'A': array([4]), 'B': array([5]), 'C': array([6])}",
    "{'A': array([7]), 'B': array([8]), 'C': array([9])}"
]

# 用eval时指定globals,把numpy.array传入
dict_list = [eval(s, {'array': np.array}) for s in str_dicts]
df = pd.DataFrame(dict_list)

# 若需将单元素数组转为普通数值,执行以下步骤
df = df.applymap(lambda x: x.item() if isinstance(x, np.ndarray) else x)
print(df)

关键说明

  • 直接转单列的原因:pd.DataFrame(str_dicts)会把每个字符串当作单个元素,必须先将每个字符串解析为字典,再用字典列表生成DataFrame。
  • NameError的原因:eval和ast.literal_eval默认命名空间中没有array这个名称,要么替换掉字符串中的array写法,要么显式引入np.array到命名空间。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 18:15:49