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

如何在pandas中读写指定列?读取Excel列索引报错怎么解决?

你用df[j][i]写法报错的核心原因是:pandas中df[参数]默认优先匹配列名,你读取的Excel第一行是表头item1~item5,所以列名是这几个字符串,不存在名为2、3这类数字的列,所以当j≥2时找不到对应列就会报错。你之前df[1]能正常取值属于读取配置异常带来的巧合情况,不具备通用性。

以下是正确的列引用方法:

1. 已知列名,按列名引用

直接把列名字符串放在[]里即可:

  • 取整列:df['item1'](对应第一列)、df['item2'](对应第二列)
  • 取某列的第i行值:df['item1'][i]

2. 按列的位置序号引用

用pandas提供的iloc索引器,位置序号从0开始计数,格式为df.iloc[行位置, 列位置]:

  • 取第j列整列:df.iloc[:, j]
  • 取第j列第i行的值:df.iloc[i, j]

这种写法刚好匹配你用数字j遍历列的需求,你的循环代码可以修改为:

import pandas as pd
import numpy as np

df = pd.read_excel('test.xlsx')
amount = df.shape[0]
col = df.shape[1]
# 注意不要用[[0]*amount]*col的写法,属于浅拷贝会有联动修改的坑,直接用np.zeros创建全0数组
a = np.zeros((col, amount))

for j in range(col):
    for i in range(amount):
        a[j][i] = df.iloc[i, j]

额外优化建议

你要把整个DataFrame转成numpy数组完全不用手写循环,一行代码就能实现:

# 转成的数组默认形状是(行数, 列数),如果需要你之前的(列数, 行数),加个.T转置即可
a = df.to_numpy().T

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 07:36:06