如何快速从Pandas列的字典值提取生成新列?
高效提取Pandas字典列中值的方案
针对你遇到的apply(lambda)速度慢的问题,推荐以下两种高效实现方式,均为Pandas内置的矢量化/批量处理操作,比Python层面的循环效率高得多:
方法一:使用str.get()(单字段提取最优解)
这是Pandas专门为包含字典/对象的object类型Series设计的矢量化方法,底层经过优化,完全避免了Python循环:
calFilteredDf['startTime'] = calFilteredDf['start'].str.get('dateTime')
对于你的1697行数据集,该方法的执行速度会比apply(lambda)快数倍。
方法二:将字典列转为DataFrame(多字段提取更方便)
如果后续需要提取字典中的多个字段(比如同时取date和dateTime),可以直接把整个字典列展开成结构化DataFrame,再按需提取:
import pandas as pd # 将start列的所有字典展开为DataFrame start_struct_df = pd.DataFrame(calFilteredDf['start'].tolist()) # 提取dateTime字段到原DataFrame calFilteredDf['startTime'] = start_struct_df['dateTime']
这种方式利用了Pandas对列表转DataFrame的高效处理逻辑,同样比apply高效。
补充说明
你之前尝试的calFilteredDf['start']['dateTime']直接赋值无效,是因为calFilteredDf['start']是Series对象而非单个字典,无法直接通过键索引取值,必须用批量处理的方式操作每个元素。
另外,swifter在小数据集上变慢是正常现象——并行处理的初始化开销远超过实际计算耗时,小数据场景下内置矢量化方法是最优选择。
内容的提问来源于stack exchange,提问作者CofeeBean42
相关产品推荐
相关产品推荐

