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

如何将JSON文件生成的列表转换为DataFrame并保留所有需要的列?

报错原因说明

  • UnicodeDecodeError: 'charmap' codec can't decode byte:Windows系统下open函数默认使用系统编码(一般为GBK)打开文件,你的JSON文件为UTF-8编码,未指定编码时解码失败,添加encoding='utf8'参数即可解决。
  • JSONDecodeError: Extra data:你的JSON文件属于JSON Lines格式,即每行是一个独立的JSON对象,整个文件不是标准的单JSON结构,直接用json.load加载整个文件会识别到多段JSON数据触发报错,你采用的逐行加载方式是正确的。

items字段拆分方案

你当前items列是单键字典组成的列表,只需要先将列表内的所有字典合并为单个字典,再拆分即可,两种实现方法如下:

方法1:生成DataFrame后处理(适配你当前的代码流程)

在你现有得到dataset的基础上,执行如下代码:

# 合并items列的所有单键字典为一个字典
dataset["items"] = dataset["items"].apply(lambda x: {k: v for item in x for k, v in item.items()})
# 拆分字典为独立列,和原有字段拼接得到最终结果
df_result = pd.concat([dataset.drop(columns=["items"]), dataset["items"].apply(pd.Series)], axis=1)

方法2:加载后直接处理(更简洁)

在逐行加载得到data列表后,无需先转成基础DataFrame,直接处理一步完成转换:

# 处理每条数据的items字段,合并字典后转成DataFrame
processed_data = []
for line in data:
    items_dict = {k:v for item in line.pop("items") for k,v in item.items()}
    line.update(items_dict)
    processed_data.append(line)
df_result = pd.DataFrame(processed_data)

两种方法最终得到的df_result都会保留原有exp、username、email、date字段,同时所有item会生成独立列,对应数值直接填充到对应行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 07:42:03