如何更高效地将嵌套字典转换为目标格式pandas DataFrame
高效实现方案
你原有写法的效率瓶颈来自三点:
- 对同一个字典做了5次独立遍历,分别生成5个列的列表,存在大量重复的Python层循环开销
- 逐元素调用
datetime.datetime.strptime做日期转换,批量场景下性能远差于pandas内置的向量化日期转换方法 - 先生成
Date列再调用set_index,存在不必要的内存拷贝
优化后代码
直接利用pandas对嵌套字典的原生构造支持,全程走底层向量化逻辑,没有多余循环:
import pandas as pd data = {} for index, row in get_data_row_by_row(): data[index] = row # 嵌套字典直接按行构造,外层key自动作为行索引,内层key自动作为列名 df = pd.DataFrame.from_dict(data, orient='index') # 批量转换索引为日期类型,无需单独生成Date列再重置索引 df.index = pd.to_datetime(df.index, format="%Y-%m-%d") # 如需严格匹配原有列顺序,加上这行即可 df = df[['Open', 'Close', 'Low', 'High']]
性能优势
- 省去了Python层的多次循环遍历,DataFrame构造逻辑走pandas底层C实现,数据量越大性能差距越明显,十万级数据量下速度可以提升10~100倍
- 用
pd.to_datetime做批量日期类型转换,比逐元素调用标准库日期解析方法效率高一个量级 - 直接修改索引类型,省去了
set_index带来的额外数据拷贝,内存占用更低 - 最终生成的DataFrame和你原有逻辑的结果完全一致:索引为
DatetimeIndex类型,列名、数值、顺序完全匹配
内容的提问来源于stack exchange,提问作者alex-uarent-alex
相关产品推荐
相关产品推荐

