Pandas链式调用assign、loc及pd.Timedelta计算筛选后时间差均值时的KeyError报错解决
修复Pandas链式调用中的KeyError问题
我来帮你排查下第二种方法报错的原因,其实是两个小问题导致的,咱们一步步解决:
错误原因分析
- 引用了错误的DataFrame:你在
.loc筛选时写了df_reservation_delay['diffe'],但这个变量根本不存在呀!而且就算用原df_test也不对——链式调用中,每一步返回的都是经过处理后的新DataFrame,直接引用原df会导致数据不匹配,还找不到刚添加的diffe列。 - 未指定均值计算的列:直接调用
.mean()会对所有列尝试计算均值,而你的id列是字符串,不仅会报错,也不是你想要的结果。
修复后的链式代码
把这两个问题修正后,代码就能正常运行了:
df_final = (df_test .sort_values(by='id') .assign(diffe=lambda x: x['date2'] - x['date1']) # 用lambda引用当前链式中的DataFrame .loc[lambda x: x['diffe'] >= pd.Timedelta(100, 'D')] # 同样用lambda筛选新添加的列 ['diffe'] # 只保留我们需要计算均值的列 .mean() # 计算时间差的均值 )
关键修改点说明
- 用
lambda x访问链式中的DataFrame:在assign和loc里,x代表的是经过前面步骤处理后的DataFrame,这样就能正确访问刚添加的diffe列,不会出现KeyError。 - 指定计算均值的列:先选取
['diffe']再调用.mean(),确保只计算时间差的均值,避免无效计算。
这样修改后,第二种方法的结果就和第一种完全一致啦!
内容的提问来源于stack exchange,提问作者noliverte
相关产品推荐
相关产品推荐

