如何高效将含列表值的字典转换为指定格式的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
相关产品推荐
相关产品推荐

