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

如何用Pandas将DataFrame中嵌套Map类型列拆分为多列?

解决嵌套JSON字符串列展开为结构化DataFrame的问题

问题原因

你的Data列存储的是JSON格式的字符串,而非Python原生字典。直接将这类字符串传入pd.json_normalize无法被解析,因此返回空DataFrame。另外explode方法仅适用于展开列表类型的单元格,对嵌套JSON结构无效。

解决方案

需要先将JSON字符串转换为Python字典,再进行结构化展开,步骤如下:

  1. 转换JSON字符串为字典:使用json.loads解析每一行的Data列内容
  2. 展开嵌套JSON:用pd.json_normalize处理转换后的字典列表
  3. 合并ID列与结果:将原DataFrame的ID列和展开后的结构化数据拼接
  4. 调整列名格式:将默认的点分隔列名替换为下划线,匹配目标结构

完整代码示例

import json
import pandas as pd

# 处理JSON字符串转字典
df_test['Data'] = df_test['Data'].apply(json.loads)

# 展开嵌套JSON结构
expanded_data = pd.json_normalize(df_test['Data'])

# 合并ID列与展开数据
final_df = pd.concat([df_test['ID'], expanded_data], axis=1)

# 替换列名中的点为下划线,匹配目标格式
final_df.columns = final_df.columns.str.replace('.', '_')

# 查看结果
print(final_df)

执行后即可得到你期望的结构化DataFrame:

IDB_1__secondsB_1__nanosecondsC_1__secondsC_1__nanosecondsD_1__secondsD_1__nanoseconds
test-001166320741046600000016632074099780000001663207417231000000
test-002166320243113400000016632082454120000001663203482682000000

注:如果需要去掉列名中多余的下划线(比如_seconds前的两个下划线),可以用str.replace('__', '_')进一步处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 11:31:40