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

如何将矩阵传入指数分布求和函数,解决Pandas KeyError报错

问题原因
  • 取值逻辑错误:pandas的DataFrame默认用A[参数]的形式取数时,参数会被识别为列名而非行索引。你的矩阵是5000行121列,列名最大为120(0索引规则)或者121(Excel列1开头规则),当循环中i变量取到121时,pandas会尝试查找名为121的列,不存在就触发KeyError。
  • 数值格式问题:你表格里的数值用逗号作为小数点分隔符(比如10,15实际是10.15),如果不提前转换,直接调用int()会触发类型转换报错。
  • 行列数匹配问题:如果Excel第一列是行序号(表格中最左侧无表头的序列),读入时未设置为行索引的话,会被当成普通数据列,导致A.shape返回的列数比实际数据多1,进一步触发索引越界。
解决方法

优先修正取值方式,用.iloc[行索引,列索引]按位置取数,同时处理数值格式和行索引问题,优化后的代码如下:

import numpy as np
import pandas as pd

# 读入Excel时指定逗号为小数点分隔符,第一列为行索引
A = pd.read_excel("matrix.xlsx", decimal=',', index_col=0)
# 若读入后数值还是字符串格式,加这句批量转换:A = A.replace(',', '.', regex=True).astype(float)

num_rows, num_cols = A.shape
a = np.zeros((num_rows, num_cols))

for i in range(num_rows):
    for j in range(num_cols):
        # 用iloc按位置取数,不会触发列名查找的KeyError
        sample_count = int(A.iloc[i, j])
        a[i, j] = np.sum(np.random.exponential(5000, sample_count))

如果要进一步提升运行速度,可以去掉两层Python循环,用向量化操作降低开销:

# 先把DataFrame转成numpy数组
A_np = A.astype(int).to_numpy()
# 向量化生成结果
a = np.vectorize(lambda x: np.sum(np.random.exponential(5000, x)))(A_np)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 04:51:03