如何在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
相关产品推荐
相关产品推荐

