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

导出DataFrame筛选结果至Excel触发KeyError,求解决方法

问题分析与解决

报错根源

KeyError 是因为你导出Excel时指定的列名 ['Date','name', 'myname', 'fx'] 并不存在于DataFrame a 中。a 从 df2 筛选而来,而 df2 的列是 Date、name1、myname1、fx1,两者列名完全不匹配,自然找不到对应列。

另外你的筛选逻辑 df2[np.array(df)> np.array(df2)] 也有问题:df 和 df2 列名不一致,直接转数组比较会导致维度错位,最终得到的a里会有大量NaN值,不符合筛选有效数据的需求。

修正方案

步骤1:修正筛选逻辑

要实现“用df的pct_change结果对比df2对应列,筛选df2中符合条件的行”,需要先对齐对比列,生成正确的布尔掩码:

  • 提取df中计算后的百分比变化列(name、myname、fx)
  • 提取df2中对应对比列(name1、myname1、fx1),并重命名和df列名一致,方便比较
  • 生成布尔条件后,筛选df2的行

步骤2:修正导出列名

导出时使用df2实际存在的列名,或者根据需求重命名列后再导出。

修正后的代码

import pandas as pd
import numpy as np

# 文件路径
path = 'C:/Users/a1b.xlsx'

# 读取数据
df = pd.read_excel(path, sheet_name='Sheet1', usecols=['Date','name', 'myname', 'fx'])
df2 = pd.read_excel(path, sheet_name='Sheet1', usecols=['Date','name1', 'myname1', 'fx1'])

# 计算百分比变化
df[['name','myname','fx']] = df[['name','myname','fx']].pct_change(periods=5)

# 对齐df2的列名,方便和df对比
df2_compare = df2.rename(columns={'name1':'name', 'myname1':'myname', 'fx1':'fx'})
# 生成布尔掩码:df的百分比变化 > df2对应列的值
mask = df[['name','myname','fx']] > df2_compare[['name','myname','fx']]
# 筛选df2中至少满足一个条件的行(用all()可要求全部满足,按需调整)
a = df2[mask.any(axis=1)]

# 导出时使用df2实际的列名
a.to_excel('C:/Users/a1b.xlsx', sheet_name='Sheet3', startcol=2, index=False, columns=['Date','name1', 'myname1', 'fx1'])

可选调整:导出指定列名

如果希望导出的列名是name、myname、fx,可以在筛选后给a重命名列再导出:

a_renamed = a.rename(columns={'name1':'name', 'myname1':'myname', 'fx1':'fx'})
a_renamed.to_excel('C:/Users/a1b.xlsx', sheet_name='Sheet3', startcol=2, index=False, columns=['Date','name', 'myname', 'fx'])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:01:19