如何高效解析Pandas DataFrame字典列并新增列?(超200万行场景)
高效解析Pandas DataFrame中的字典列方案
针对你处理200万+行、含字符串格式字典列的DataFrame时,循环+if条件效率低下且无法自动适配新键的问题,以下是高效解决方案:
核心思路
利用Pandas的矢量化操作替代Python循环,自动识别所有字典键并展开为列,无需手动维护条件判断。
步骤1:将字符串字典转换为实际字典对象
CSV读取后dict_data列是字符串格式,需先转换为Python字典:
import pandas as pd import ast # 读取CSV文件 df = pd.read_csv('your_data.csv') # 批量转换字符串字典为实际字典,比循环处理快数倍 df['dict_data'] = df['dict_data'].apply(ast.literal_eval)
步骤2:自动展开字典列为多列
使用Pandas内置方法将字典列直接展开为新的DataFrame,自动识别所有存在的键(包括新增键):
# 展开字典列,自动生成所有键对应的列 expanded_df = pd.DataFrame(df['dict_data'].tolist()) # 将缺失值替换为空字符串,匹配你的输出需求 expanded_df = expanded_df.fillna('')
步骤3:合并原数据与展开后的列
将原DataFrame和展开后的字典列合并:
# 按列合并数据 final_df = pd.concat([df, expanded_df], axis=1)
简化版代码(一步到位)
利用pd.json_normalize可以更简洁地完成展开操作:
import pandas as pd import ast df = pd.read_csv('your_data.csv') df['dict_data'] = df['dict_data'].apply(ast.literal_eval) final_df = pd.concat([df, pd.json_normalize(df['dict_data']).fillna('')], axis=1)
效率优势
- 完全避免Python层面的逐行循环,依托Pandas的C扩展实现矢量化处理,200万行数据处理时间可从数小时压缩至几分钟级别。
- 自动识别所有字典中的键,无需手动更新条件,新键出现时会自动生成对应列,适配数据变化。
内容的提问来源于stack exchange,提问作者Joel Divekar
相关产品推荐
相关产品推荐

