Pandas DataFrame新增列报IndexError下标越界问题如何解决
报错原因
你代码中操作的spectrum是形状为(N,4)的numpy数组,原本只有4列,列索引最大为3,直接给索引4的位置赋值自然会触发越界错误。你之前用df["新列名"]赋值不生效,大概率是你操作的对象是转成numpy之后的数组,不是原Pandas DataFrame对象。
解决方案
情况1:直接对Pandas DataFrame操作(推荐,适合批量处理200个CSV)
读取CSV后保留DataFrame结构,直接用Pandas原生列赋值语法即可自动在最后新增计算列:
import pandas as pd import os # 替换为你的CSV文件存放目录 csv_dir = "./csv_files" all_data = [] for file_name in os.listdir(csv_dir): if file_name.endswith(".csv"): df = pd.read_csv(os.path.join(csv_dir, file_name)) # 自定义新列名,这里以SpectrumScore为例 df["SpectrumScore"] = (df["EF"] + df["NP"]) / (df["EP"] + df["EF"] + df["NP"] + df["NF"]) all_data.append(df) # 如果需要合并所有CSV的数据到同一个DataFrame,可开启下一行 # total_df = pd.concat(all_data, ignore_index=True)
情况2:必须操作numpy数组的场景
如果现有代码逻辑不能修改,必须在numpy数组上新增列,需要先对数组扩容再赋值,不能直接操作不存在的列索引:
import numpy as np # 原有计算逻辑 EP = spectrum[:, 0] EF = spectrum[:, 1] NP = spectrum[:, 2] NF = spectrum[:, 3] # 计算新列并转为(N,1)的二维数组 new_col = ((EF + NP)/(EP + EF + NP + NF)).reshape(-1, 1) # 拼接新列,得到5列的新数组 spectrum = np.hstack([spectrum, new_col])
处理后的spectrum形状为(N,5),后续就可以正常访问索引4的列。
内容的提问来源于stack exchange,提问作者Eyinlojuoluwa
相关产品推荐
相关产品推荐

