如何将DataFrame高效转换为以(行索引,列名)为键的字典
高效实现DataFrame转(行索引,列名)为键的字典
针对大数据量的场景,优先使用pandas内置的矢量化操作(避免手动循环,循环在数据量大时效率极低),以下是两种高效实现方案:
方法一:stack() + to_dict()(推荐,最简洁高效)
stack()会将列索引转换为多层索引的下层,生成的Series的索引恰好是(行索引, 列名)的元组,直接调用to_dict()即可完成转换:
import pandas as pd df = pd.DataFrame({'col1': [1, 2], 'col2': [0.5, 0.75]}, index=['row1', 'row2']) # 核心转换代码 result_dict = df.stack().to_dict() print(result_dict) # 输出: # {('row1', 'col1'): 1, ('row1', 'col2'): 0.5, ('row2', 'col1'): 2, ('row2', 'col2'): 0.75}
方法二:melt() + set_index() + to_dict()
如果需要对行列做额外筛选或处理,可通过melt重塑数据后构建字典,效率同样优异:
import pandas as pd df = pd.DataFrame({'col1': [1, 2], 'col2': [0.5, 0.75]}, index=['row1', 'row2']) # 核心转换代码 melted_df = df.reset_index().melt(id_vars='index', var_name='col', value_name='val') result_dict = melted_df.set_index(['index', 'col'])['val'].to_dict() print(result_dict) # 输出与方法一完全一致
效率说明
两种方法均基于pandas内部优化的矢量化逻辑,比Python原生循环快数倍至数十倍,尤其适配十万级以上的大数据量;其中方法一代码更简洁,执行效率略高于方法二。
内容的提问来源于stack exchange,提问作者qqzj
相关产品推荐
相关产品推荐

