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

合并DataFrame时出现plant_name列KeyError的问题求助

合并DataFrame时出现KeyError('plant_name')的排查与解决

问题背景

两个DataFrame(coeff和ncDatam)均显示包含plant_name列,但执行merge操作按该列合并时触发KeyError。

相关数据信息

coeff列信息与数据:

coeff.columns
Out[66]: Index(['plant_name', 'slopex', 'intercept'], dtype='object')
coeff.head(5)
Out[67]: 
      plant_name    slopex    intercept
0  BII NEE STIPA  1.095434 -1278.741489
1  DOS ARBOLITOS  1.161407 -3438.054141
2         PIER B  0.819827  3352.473727
3        PIER II  0.906328   903.044250
4        PIER IV  0.987371  4850.368353

ncDatam列信息与数据:

ncDatam.columns
Out[63]: Index(['plant_name', 'year', 'month', 'power_kwh'], dtype='object')
ncDatam.head(5)
Out[68]: 
      plant_name  year  month  power_kwh
0  BII NEE STIPA  1991      1   11905.83
1  BII NEE STIPA  1991      2   15084.93
2  BII NEE STIPA  1991      3    7823.63
3  BII NEE STIPA  1991      4    4417.25
4  BII NEE STIPA  1991      5    2987.07

合并报错信息:

df = ncDatam.merge(coeff, on='plant_name') 
Traceback (most recent call last):
  File "<ipython-input-69-9cba791972e8>", line 1, in <module>
    df = ncDatam.merge(coeff, on='plant_name')
  File "C:\Users\U321103\Anaconda3\envs\Stats\lib\site-packages\pandas\core\frame.py", line 7297, in merge
    validate=validate,
  File "C:\Users\U321103\Anaconda3\envs\Stats\lib\site-packages\pandas\core\reshape\merge.py", line 86, in merge
    validate=validate,
  File "C:\Users\U321103\Anaconda3\envs\Stats\lib\site-packages\pandas\core\reshape\merge.py", line 627, in __init__
    ) = self._get_merge_keys()
  File "C:\Users\U321103\Anaconda3\envs\Stats\lib\site-packages\pandas\core\reshape\merge.py", line 983, in _get_merge_keys
    right_keys.append(right._get_label_or_level_values(rk))
  File "C:\Users\U321103\Anaconda3\envs\Stats\lib\site-packages\pandas\core\generic.py", line 1692, in _get_label_or_level_values
    raise KeyError(key)
KeyError: 'plant_name'

DataFrame创建方式:

  • coeff创建代码:
coeff = output.reset_index()
print(coeff)
coeff.columns.values[1]= "slopex"
coeff.columns.values[0]= 'plant_name'
           index     Slope     intercept
0  BII NEE STIPA  1.095434  -1278.741489
1  DOS ARBOLITOS  1.161407  -3438.054141
2         PIER B  0.819827   3352.473727
3        PIER II  0.906328    903.044250
4        PIER IV  0.987371   4850.368353
5       SANTIAGO  0.395098  21697.674121
6      VENTA III  1.069942  -1924.804108
7        VENTOSA  0.986452  -1926.409407
  • ncDatam创建代码:
ncData.columns
Out[81]: Index(['plant_name', 'business_name', 'maint_region_name', 'power_kwh', 'dataset', 'year', 'month', 'day', 'hour'], dtype='object')
ncDatam = ncData.groupby(["plant_name","year","month"])[["power_kwh"]].mean().reset_index().round(2)

列数据类型:

print(coeff.columns.to_series().groupby(coeff.dtypes).groups)
{dtype('float64'): Index(['slopex', 'intercept'], dtype='object'), dtype('O'): Index(['plant_name'], dtype='object')}
print(ncDatam.columns.to_series().groupby(ncDatam.dtypes).groups)
{dtype('int64'): Index(['year', 'month'], dtype='object'), dtype('float64'): Index(['power_kwh'], dtype='object'), dtype('O'): Index(['plant_name'], dtype='object')}

排查原因

核心问题出在coeff的列名修改方式:直接操作columns.values修改列名,可能导致Pandas内部列名元数据未同步更新,或者列名存在不可见空白字符(如空格、制表符)。虽然打印coeff.columns显示列名为plant_name,但实际内部列名与字面显示存在差异,导致合并时无法匹配。

解决方案

方案1:使用标准列名修改方法替代直接操作columns.values

用Pandas官方推荐的方式修改列名,确保元数据同步:

# 方式一:直接赋值完整列名列表
coeff.columns = ['plant_name', 'slopex', 'intercept']

# 方式二:使用rename方法精准修改
coeff = coeff.rename(columns={'index': 'plant_name', 'Slope': 'slopex'})

方案2:清理列名中的不可见字符

若列名存在隐藏空白,先清理两个DataFrame的列名:

# 清理coeff列名
coeff.columns = [col.strip() for col in coeff.columns]
# 清理ncDatam列名
ncDatam.columns = [col.strip() for col in ncDatam.columns]

方案3:明确指定左右表的合并列

合并时分别指定左右表的列名,强制匹配:

df = ncDatam.merge(coeff, left_on='plant_name', right_on='plant_name')

验证步骤

修改后执行以下命令确认列名有效性:

# 打印列名列表
print(coeff.columns.tolist())
print(ncDatam.columns.tolist())
# 检查列名是否存在
print('plant_name' in coeff.columns)
print('plant_name' in ncDatam.columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 16:00:19