You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从DataFrame生成{(行,列):单元格值}格式的字典?

从DataFrame生成{(行, 列): 单元格值}格式字典的实现方案

推荐方案:用stack()快速转换(高效首选)

pandas的stack()方法可以直接把列索引“堆叠”到行索引层,生成一个带MultiIndex的Series,再调用to_dict()就能直接得到你要的格式,全程是矢量化操作,比循环快得多,尤其适合大数据集:

import pandas as pd

# 示例DataFrame
df = pd.DataFrame({'A': [1, 2], 'B': [3, 4]}, index=['X', 'Y'])

# 一步转换
target_dict = df.stack().to_dict()
print(target_dict)
# 输出:{('X', 'A'): 1, ('X', 'B'): 3, ('Y', 'A'): 2, ('Y', 'B'): 4}

备选方案:循环实现(灵活但效率稍低)

循环完全可行,适合小数据集或者需要对每个单元格做自定义处理的场景。这里推荐用itertuples(),比iterrows()速度快:

target_dict = {}
# 遍历每一行,获取行索引和各列值
for row in df.itertuples():
    row_idx = row.Index
    for col in df.columns:
        target_dict[(row_idx, col)] = getattr(row, col)

也可以直接遍历索引和列的组合:

target_dict = {}
for idx in df.index:
    for col in df.columns:
        target_dict[(idx, col)] = df.loc[idx, col]

另一种思路:用melt()转长格式后转字典

如果习惯处理长格式数据,也可以先把DataFrame转成长表,再设置复合索引后转字典:

# 重置索引后转长格式
melted_df = df.reset_index().melt(id_vars='index', var_name='column', value_name='value')
# 设置复合索引并转字典
target_dict = melted_df.set_index(['index', 'column'])['value'].to_dict()

关于循环是否合适?

当然合适,但要分场景:

  • 小数据量或需要自定义单元格逻辑(比如类型转换、条件过滤):循环代码直观,容易调试和维护。
  • 大数据量:优先用stack()这类内置方法,因为pandas的内置操作是C底层实现,速度比Python循环快几个量级。

内容的提问来源于stack exchange,提问作者Incognito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 14:35:34