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

如何解决Pandas代码中的KeyError:7错误?实现按条件拆分Diff列用于回归分析

解决Pandas中KeyError:7的问题及实现条件列拆分的方法

嘿,我来帮你搞定这个Pandas的KeyError:7问题!咱们先搞清楚报错的根源,再给你两种靠谱的解决办法。

为什么会出现KeyError:7?

你用df_reg.loc[..., 7]取列的时候犯了两个小错误:

  1. loc是按列名索引的工具,不是按列的位置编号,所以它找不到名为7的列,直接触发报错;
  2. 就算你想用位置索引,过滤后的df_reg列结构已经和原表alldf_semplificato不一样了,原来的第7列位置早就改变,用数字索引完全不靠谱。

而且你刚新增了Diff列,直接用列名'Diff'来引用才是最稳妥的方式。


方法一:修复原代码(最简单直接)

把原来用数字7的地方换成列名'Diff',同时优化筛选条件的写法,让代码更简洁:

import pandas as pd
import re

# 筛选指定REGOLA值的行,用isin代替多个或条件,更简洁
df_reg= alldf_semplificato[alldf_semplificato['REGOLA'].isin([
    'ISCRITTO RUOLO GENERALE',
    'DESIGNATO GIUDICE FISSATA',
    'SENTENZA VERBALE CON NUMERO',
    'DEPOSITATA PUBBLICATA SENTENZA CONFERMA'
])]

# 计算索引差值
df_reg['Diff'] = df_reg.index.to_series().diff()

# 用列名'Diff'代替数字7,生成目标列
df_reg['Diff1'] = df_reg.loc[df_reg['REGOLA'] == 'DESIGNATO GIUDICE FISSATA', 'Diff']
df_reg['Diff2'] = df_reg.loc[df_reg['REGOLA']=='SENTENZA VERBALE CON NUMERO', 'Diff']
df_reg['Diff3'] = df_reg.loc[df_reg['REGOLA']=='DEPOSITATA PUBBLICATA SENTENZA CONFERMA', 'Diff']

修改后就不会再报错了,而且只有当REGOLA匹配对应值时,Diff的值才会被放到对应的Diff1/Diff2/Diff3列里,不满足条件的行自动填充NaN,完全符合你的需求。


方法二:用pivot更优雅地实现(适合扩展)

如果以后你需要新增更多类似的拆分列,用pivot的方式会更灵活,代码也更整洁:

import pandas as pd
import re

# 筛选行
df_reg= alldf_semplificato[alldf_semplificato['REGOLA'].isin([
    'ISCRITTO RUOLO GENERALE',
    'DESIGNATO GIUDICE FISSATA',
    'SENTENZA VERBALE CON NUMERO',
    'DEPOSITATA PUBBLICATA SENTENZA CONFERMA'
])]

# 计算索引差值
df_reg['Diff'] = df_reg.index.to_series().diff()

# 创建映射字典:把REGOLA值对应到目标列名
regola_to_col = {
    'DESIGNATO GIUDICE FISSATA': 'Diff1',
    'SENTENZA VERBALE CON NUMERO': 'Diff2',
    'DEPOSITATA PUBBLICATA SENTENZA CONFERMA': 'Diff3'
}

# 新增临时列,标记当前行应该对应到哪个目标列
df_reg['Target_Col'] = df_reg['REGOLA'].map(regola_to_col)

# 用pivot重塑数据,然后合并回原DataFrame
pivoted = df_reg.pivot(index=df_reg.index, columns='Target_Col', values='Diff')
df_reg = df_reg.join(pivoted)

# 可选:删掉临时列,保持数据整洁
df_reg.drop('Target_Col', axis=1, inplace=True)

这种方法的好处是,以后要加新的拆分规则,只需要在regola_to_col字典里加新的键值对就行,不用再写重复的loc语句。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 17:02:42