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

如何将Pandas的JSON列转换为多行?处理可变长度数组数据

嘿,这个问题其实很好解决!你需要的是把嵌套的字典结构展开成扁平的行,不管每个rowid对应的列表有多长,pandas都能轻松处理。下面给你两种实用的方法:

方法1:手动遍历展开(直观易懂)

这种方法逻辑清晰,适合新手理解,核心就是逐个遍历每个rowid对应的子列表,把每个字典元素拆成单独的行,同时带上对应的rowid:

import pandas as pd

# 你的原始数据
data1 = {
    0: [{'confident': False, 'iab': 'IAB25-3'}],
    1: [{'confident': False, 'iab': 'IAB6-6'}, {'confident': True, 'iab': 'IAB6'}],
    2: [{'confident': True, 'iab': 'IAB16-1'}, {'confident': True, 'iab': 'IAB16'}, {'confident': False, 'iab': 'IAB9'}, {'confident': False, 'iab': 'IAB9-28'}]
}

# 初始化一个空列表用来存放展开后的数据
flat_rows = []

# 遍历每个rowid和对应的字典列表
for rowid, item_list in data1.items():
    # 遍历列表里的每个字典
    for item in item_list:
        # 把rowid和字典里的键值对合并成一个新字典,加入列表
        flat_rows.append({
            'rowid': rowid,
            'confident': item['confident'],
            'iab': item['iab']
        })

# 转换成你需要的DataFrame
result_df = pd.DataFrame(flat_rows)
print(result_df)

运行后输出的结果就是你想要的结构:

rowid  confident       iab
0      0      False  IAB25-3
1      1      False   IAB6-6
2      1       True     IAB6
3      2       True  IAB16-1
4      2       True    IAB16
5      2      False     IAB9
6      2      False  IAB9-28

方法2:用pandas内置方法(简洁高效)

如果想更简洁地用pandas的原生功能处理,可以结合from_dict、explode和apply(pd.Series)来实现,代码更紧凑:

import pandas as pd

data1 = {
    0: [{'confident': False, 'iab': 'IAB25-3'}],
    1: [{'confident': False, 'iab': 'IAB6-6'}, {'confident': True, 'iab': 'IAB6'}],
    2: [{'confident': True, 'iab': 'IAB16-1'}, {'confident': True, 'iab': 'IAB16'}, {'confident': False, 'iab': 'IAB9'}, {'confident': False, 'iab': 'IAB9-28'}]
}

# 第一步:把原始字典转成DataFrame,rowid作为索引,列表存在items列
temp_df = pd.DataFrame.from_dict(data1, orient='index', columns=['items'])
# 第二步:把索引转成rowid列,重置索引
temp_df = temp_df.reset_index().rename(columns={'index': 'rowid'})
# 第三步:展开items列,每个列表元素变成一行
temp_df = temp_df.explode('items', ignore_index=True)
# 第四步:把items里的字典拆成单独的confident和iab列
result_df = pd.concat([temp_df[['rowid']], temp_df['items'].apply(pd.Series)], axis=1)

print(result_df)

这个方法的输出和方法1完全一致,适合处理大规模数据时使用,利用pandas的优化提升效率。

两种方法都能完美处理任意长度的子列表,不管n是1还是100,都能自动展开成对应的行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 12:27:43