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

如何高效将含列表值的字典转换为指定格式的DataFrame?

将特定字典转换为指定格式DataFrame的高效实现方法

问题描述

现有如下格式的字典,键为字符串,值是包含子列表的列表:

d = {
    '5/8': [[12, 15], [15, 18]],
    '12/19': [[2, 3]],
    '20/22': [[13, 18], [28, 22], [17, 110]]
}

需要将其转换为DataFrame,要求:

  • 原字典的键作为id列,根据对应值的子列表数量重复
  • 每个子列表的两个元素分别存入x列和y列
    最终目标格式如下:
id    x    y
  '5/8'   12   15
  '5/8'   15   18
'12/19'    2    3
'20/22'   13   18
'20/22'   28   22
'20/22'   17   110

高效实现方案

方案1:Pandas内置方法组合(代码简洁)

利用from_dict、explode和列拆分的组合,代码可读性强,适合中小数据量场景:

import pandas as pd

d = {
    '5/8': [[12, 15], [15, 18]],
    '12/19': [[2, 3]],
    '20/22': [[13, 18], [28, 22], [17, 110]]
}

# 1. 将字典转为初始DataFrame,重命名列
df = pd.DataFrame.from_dict(d, orient='index').reset_index().rename(columns={'index': 'id', 0: 'xy'})
# 2. 展开子列表
df = df.explode('xy')
# 3. 将子列表拆分为x、y列
df[['x', 'y']] = pd.DataFrame(df['xy'].tolist(), index=df.index)
# 4. 删除临时列
df = df.drop('xy', axis=1)

print(df)

方案2:列表推导式构造数据(大数据量最优)

通过纯Python列表推导式提前构造所有行数据,再一次性转为DataFrame,避免Pandas多次中间操作的开销,数据量越大效率优势越明显:

import pandas as pd

d = {
    '5/8': [[12, 15], [15, 18]],
    '12/19': [[2, 3]],
    '20/22': [[13, 18], [28, 22], [17, 110]]
}

# 手动构造每行数据
data_rows = []
for id_val, sublist_group in d.items():
    for x_val, y_val in sublist_group:
        data_rows.append({'id': id_val, 'x': x_val, 'y': y_val})

# 转为DataFrame
df = pd.DataFrame(data_rows)

print(df)

效率对比

  • 中小数据量:两种方案差异极小,方案1代码更简洁易读
  • 大数据量:方案2的效率明显更高,因为列表推导式在Python层面完成数据构造,减少了Pandas内部的列操作和内存转换开销

内容的提问来源于stack exchange,提问作者Mohammad.sh

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 13:10:23