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

如何在含重复日期的拼接时间序列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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:56:06