Pandas迭代构建临时DataFrame报错KeyError,如何拆分气象Excel数据?
解决按站点编码拆分气象Excel数据的问题
一、修复迭代构建临时DataFrame的代码
你遇到的KeyError:0是因为planilha_1[ind]是按列名索引,而非行索引。要正确获取单行数据并保持DataFrame格式,需要用loc[[ind]](按行标签取)或iloc[[ind]](按行位置取)。修改后的代码如下:
import pandas as pd # 读取Excel文件,替换为你的实际文件路径 planilha_1 = pd.read_excel("气象数据.xlsx") # 为空表直接退出,避免后续报错 if planilha_1.empty: print("文件为空,无需处理") exit() # 初始化第一个站点编码和临时DataFrame est = planilha_1.loc[0, 'EstacaoCodigo'] ind = 0 planilha_temp = planilha_1.loc[[ind]] ind += 1 # 循环遍历同编码的行,增加索引越界判断 while ind < len(planilha_1) and planilha_1.loc[ind, 'EstacaoCodigo'] == est: # 用loc[[ind]]获取单行DataFrame,保证与临时表格式一致 planilha_temp = pd.concat([planilha_temp, planilha_1.loc[[ind]]], axis=0, ignore_index=True) ind += 1 # 输出结果 print(planilha_temp)
关键说明
- 使用
ignore_index=True重置临时表索引,避免重复索引问题 - 增加
ind < len(planilha_1)判断,防止循环时索引越界
二、更高效的分组拆分方案
逐行循环效率极低(尤其是数据量大时),推荐直接使用Pandas的groupby功能,自动按EstacaoCodigo分组并生成子文件:
import pandas as pd planilha_1 = pd.read_excel("气象数据.xlsx") # 按站点编码分组,遍历每个分组生成子文件 for codigo, grupo_df in planilha_1.groupby('EstacaoCodigo'): # 生成以站点编码命名的子文件,index=False不保存行索引 grupo_df.to_excel(f"站点_{codigo}_气象数据.xlsx", index=False)
方案优势
- 代码简洁,无需手动处理分组边界
- 底层优化的分组逻辑,比逐行循环效率高数倍
- 自动覆盖所有站点,不会遗漏数据
内容的提问来源于stack exchange,提问作者tripster
相关产品推荐
相关产品推荐

