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

如何从Pandas DateTimeIndex序列提取多日完整时段数据?

问题:Pandas DateTimeIndex提取多日全时段数据异常

我尝试从Pandas DateTimeIndex序列中提取随机多天的完整时段数据,但传入日期列表时仅返回当日首个小时的数据;提取单日数据则正常。

代码示例

import pandas as pd
dt = pd.date_range('11-1-2022','11-4-2022',freq='6H').to_series()

提取单日(正常返回全时段)

In [204]: dt['11-3-2022']
Out[204]:
2022-11-03 00:00:00   2022-11-03 00:00:00
2022-11-03 06:00:00   2022-11-03 06:00:00
2022-11-03 12:00:00   2022-11-03 12:00:00
2022-11-03 18:00:00   2022-11-03 18:00:00
Freq: 6H, dtype: datetime64[ns]

提取多日(仅返回当日首个时段)

In [205]: dt[['11-1-2022','11-3-2022']]
Out[205]:
2022-11-01   2022-11-01
2022-11-03   2022-11-03
dtype: datetime64[ns]

解决方案

问题根源是:传入字符串列表索引时,Pandas会自动将字符串匹配为索引的日期截断值(仅保留日部分),仅返回每个日期的第一个匹配项。以下是几种可行的解决方法:

方法1:通过dt.date筛选

提取索引的日期部分,再与目标日期列表匹配:

target_dates = {'2022-11-01', '2022-11-03'}
# 将目标日期转为datetime对象后提取日期部分
target_date_objs = pd.to_datetime(list(target_dates)).date
result = dt[dt.index.date.isin(target_date_objs)]

方法2:用loc构造日期范围切片

对每个目标日期构造当日的完整时间范围,再合并结果:

target_dates = ['2022-11-01', '2022-11-03']
result = pd.concat([dt.loc[date:date+' 23:59:59'] for date in target_dates])

方法3:使用floor取整后匹配

将索引向下取整到日,再与目标日期匹配:

target_dates = pd.to_datetime(['2022-11-01', '2022-11-03'])
result = dt[dt.index.floor('D').isin(target_dates)]

以上方法均可返回指定日期的所有6小时时段数据,比如方法1的输出会包含2022-11-01和2022-11-03的全部4个时段数据。


内容的提问来源于stack exchange,提问作者kbk78

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 14:45:57