使用Timestamp定位Pandas索引时出现KeyError问题求助
解决方法
首先,你的代码错误根源是用错了索引访问方式:df[xdat]是按列名提取列,但你要访问的是行索引对应的数值,应该用.loc来定位索引和列。
具体修正步骤:
替换访问方式:把
df[xdat]['x']改成df.loc[xdat, 'x'],这是Pandas中按索引+列名取值的标准写法。检查索引匹配性:如果还是报错,大概率是生成的Timestamp和df索引的时间精度不匹配,比如df索引是
datetime.date类型,或者带时分秒的Timestamp和你生成的纯日期Timestamp有差异。可以试试把xdat转成和索引一致的格式,比如:x = df.loc[xdat.date(), 'x'] # 如果索引是date类型 # 或者先把df索引转为标准DatetimeIndex: df.index = pd.DatetimeIndex(df.index)处理缺失日期:如果date_range里的某些日期不存在于df索引中,会触发KeyError。可以先筛选出存在的日期再循环:
date_list = pd.date_range(start="2040/01/01", end="2044/07/01", freq="MS") valid_dates = [d for d in date_list if d in df.index] for xdat in valid_dates: x = df.loc[xdat, 'x']更高效的批量取值:没必要循环,直接用
df.loc[date_list, 'x']就能一次性取出所有对应日期的x列值,不存在的日期会显示NaN,比循环更高效。
内容的提问来源于stack exchange,提问作者PetGriffin
相关产品推荐
相关产品推荐

