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

如何将Python DataFrame转换为键为行列位置(i,j)的字典?

Pandas DataFrame转行列坐标为键的字典方法

目前pandas没有单独的内置函数直接实现该需求,但可以通过现有接口组合实现,无需手动编写双层遍历逻辑,性能远高于自定义遍历。


方法1:使用numpy.ndenumerate实现(最简洁高效)

直接读取DataFrame对应的numpy二维数组,通过numpy内置的多维枚举方法直接生成目标字典,不受原DataFrame行索引、列名的影响,默认返回0基行列坐标:

import pandas as pd
import numpy as np

# 示例DataFrame
df = pd.DataFrame({
    'col1': [7,8,4],
    'col2': [1,9,7],
    'col3': [2,6,5]
})

# 生成目标字典
result = dict(np.ndenumerate(df.values))

输出结果直接包含你要求的(1,2): 6项。


方法2:使用pandas原生stack方法实现

如果你不想直接调用numpy接口,可以通过调整行列索引为位置序号后,用pandas内置的stack+to_dict组合实现:

# 重置行索引为0基位置序号,列名替换为对应位置序号
df_pos = df.reset_index(drop=True).rename(columns=lambda col: df.columns.get_loc(col))
# 堆叠后转为字典
result = df_pos.stack().to_dict()

注意事项

  • 两种方法底层都已经封装了遍历逻辑,无需自己手动循环处理每一个单元格,性能远高于自定义for循环遍历DataFrame的写法,尤其适合大尺寸DataFrame的转换场景。
  • 如果你的DataFrame包含空值且需要保留空值对应的坐标项,使用stack方法时需要加dropna=False参数,即df.stack(dropna=False).to_dict(),numpy方法默认会保留所有位置包括空值位置。
  • 你之前找到的df.stack().index.tolist()默认返回的是(原行标签, 原列名)的列表,不是行列位置坐标,需要先完成行、列索引到位置序号的替换后才能生成符合要求的键。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 16:24:01