如何在含重复日期的拼接时间序列DataFrame中检索指定日期
解答
拼接对日期索引的影响
按行拼接多个带日期索引的DataFrame时,默认会保留每个原DataFrame的索引,最终markets的索引会变成重复的非唯一索引。但你触发KeyError的核心原因是:原单个DataFrame的索引是带时区的datetime类型(比如示例中的2010-01-04 00:00:00-05:00),而你用纯日期字符串'2010-01-04'无法匹配带时区的索引值;另外,markets.Date报错是因为日期是索引而非普通列,自然不能直接作为属性调用。
正确检索方式
1. 匹配带时区的索引值
直接使用带时区的完整字符串或带时区的datetime对象检索:
# 用带时区的完整字符串匹配 Reference_date = markets.loc['2010-01-04 00:00:00-05:00'] # 或者构造带时区的datetime对象 from datetime import datetime import pytz target_date = datetime(2010, 1, 4, tzinfo=pytz.timezone('America/New_York')) Reference_date = markets.loc[target_date]
2. 移除索引时区后检索
如果不需要时区信息,可以先将索引转为无时区的datetime类型,再用纯日期字符串检索:
# 移除索引的时区信息 markets.index = markets.index.tz_localize(None) # 现在可以直接用纯日期字符串检索 Reference_date = markets.loc['2010-01-04']
3. 将索引转为列后筛选
把日期索引转为普通列,再通过列条件筛选:
# 重置索引,将原日期索引转为名为Date的列 markets = markets.reset_index(names='Date') # 筛选指定日期的所有行 Reference_date = markets[markets['Date'].dt.strftime('%Y-%m-%d') == '2010-01-04']
内容的提问来源于stack exchange,提问作者maikoh
相关产品推荐
相关产品推荐

