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

DataFrame列相乘出现KeyError 'E-E11',求技术解决方案

问题排查与解决

核心问题分析

触发KeyError 'E-E11'以及计算失败的原因集中在以下几点:

  1. 变量名覆盖:函数内将全局的DataFrame变量Volx重新赋值为字符串(Volx = 'EVOL' % (i+1)),后续代码试图用字符串做索引操作,完全偏离了原本要操作的DataFrame。
  2. 字符串格式化错误:'EVOL' % (i+1)写法无效,无法生成带序号的列名;即便你不需要多列,这段代码也会破坏原有变量。
  3. 逻辑冗余与冲突:函数内重复对Multiplicationx赋值,最后一行直接覆盖前一行的计算结果,且参数Multiplicationx未实际使用。
  4. 列名验证缺失:执行drop操作后未确认剩余列名是否正确,不排除误删目标列的可能。

修复步骤与代码

第一步:确认列名正确性

先验证drop操作后两个DataFrame的列是否符合预期:

import pandas as pd

Volx = pd.read_csv('BCCdir1VOL.csv')
Volx.drop(Volx.columns[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]], inplace=True, axis=1)
print("Volx 剩余列:", Volx.columns)  # 应输出 Index(['EVOL'], dtype='object')

data1 = pd.read_csv('abaqusBCC1Dir.csv')
data1.drop(data1.columns[[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 15]], inplace=True, axis=1)
print("data1 剩余列:", data1.columns)  # 应输出 Index(['E-E11'], dtype='object')

如果输出不符合预期,说明drop操作误删了目标列,需要调整columns的索引列表。

第二步:简化计算(单列场景)

根据你的描述,两DataFrame各只有一列,无需循环,直接执行相乘:

# 直接生成结果列
data1['E11x_V'] = data1['E-E11'] * Volx['EVOL']

第三步:多列场景适配(如果需要处理多组列)

如果后续需要处理E-E111/EVOL1、E-E112/EVOL2这类带序号的列,修正函数逻辑,避免变量覆盖:

def getPower(data1, vol_df, num_of_cols):
    for i in range(num_of_cols):
        # 正确生成带序号的列名
        evol_col = f'EVOL{i+1}'
        e11_col = f'E-E11{i+1}'
        result_col = f'E11x_V{i+1}'
        
        # 先检查列是否存在,避免KeyError
        if e11_col not in data1.columns or evol_col not in vol_df.columns:
            print(f"跳过:列{e11_col}或{evol_col}不存在")
            continue
        
        # 执行相乘计算
        data1[result_col] = data1[e11_col] * vol_df[evol_col]

# 调用示例(假设需要处理1组列)
getPower(data1, Volx, 1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 17:55:42