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

Python:将扁平化JSON列表转换为指定列的DataFrame

解决方法:将扁平化列表转换为指定列的DataFrame

嗨,我来帮你搞定这个问题!从你的描述来看,你应该是把嵌套JSON扁平化后得到了一个字典组成的列表(或者类似结构),但转换时只得到了单列DataFrame——大概率是因为列表的结构没被pandas正确识别,或者你没有明确指定列的映射关系。下面是具体的解决步骤和代码示例:

第一步:确认你的扁平化列表结构

首先要确保你的扁平化列表里的每个元素是包含目标字段的字典,比如类似这样:

flattened_data = [
    {"people_gender": "male", "people_age_group": "18-24", "people_distance": 50, "time": "2024-01-01 00:00"},
    {"people_gender": "female", "people_age_group": "25-34", "people_distance": 30, "time": "2024-01-01 00:10"}
    # 更多元素...
]

如果你的列表是其他结构(比如元组列表、嵌套列表),也可以调整转换方式,下面会讲到。

第二步:正确转换为多列DataFrame

情况1:列表元素是字典

直接把列表传入pd.DataFrame(),pandas会自动将字典的键作为列名,每个字典对应一行数据:

import pandas as pd

# 替换成你自己的扁平化列表
flattened_list = [
    {"people_gender": "male", "people_age_group": "18-24", "people_distance": 45, "time": "2024-05-20 12:00"},
    {"people_gender": "female", "people_age_group": "35-44", "people_distance": 60, "time": "2024-05-20 12:10"}
]

# 转换为DataFrame
df = pd.DataFrame(flattened_list)

# 如果你需要指定列的顺序,可以加上columns参数
df = pd.DataFrame(flattened_list, columns=["time", "people_gender", "people_age_group", "people_distance"])

# 查看结果
print(df.head())

执行后你就能得到以people_gender、people_age_group、people_distance和time为列的DataFrame,每行对应一个时间点的数据。

情况2:列表元素是元组/有序序列

如果你的扁平化列表是元组或普通列表组成的(比如[(gender, age, distance, time), ...]),可以通过指定columns参数来映射列名:

import pandas as pd

# 假设你的列表是元组结构
tuple_based_list = [
    ("male", "18-24", 45, "2024-05-20 12:00"),
    ("female", "35-44", 60, "2024-05-20 12:10")
]

# 转换时指定列名
df = pd.DataFrame(tuple_based_list, columns=["people_gender", "people_age_group", "people_distance", "time"])

为什么之前会得到单列?

如果之前只得到单列,通常是因为你的列表元素不是字典/有序序列,而是单个值或者嵌套层级不对。比如如果列表是[[dict1], [dict2]]这种嵌套列表,就会被识别为单列,这时候你需要先把嵌套的外层列表解开(比如用sum(flattened_list, [])或者列表推导式[item for sublist in flattened_list for item in sublist])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:35:49