如何解决Pandas代码中的KeyError:7错误?实现按条件拆分Diff列用于回归分析
解决Pandas中KeyError:7的问题及实现条件列拆分的方法
嘿,我来帮你搞定这个Pandas的KeyError:7问题!咱们先搞清楚报错的根源,再给你两种靠谱的解决办法。
为什么会出现KeyError:7?
你用df_reg.loc[..., 7]取列的时候犯了两个小错误:
loc是按列名索引的工具,不是按列的位置编号,所以它找不到名为7的列,直接触发报错;- 就算你想用位置索引,过滤后的
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
相关产品推荐
相关产品推荐

