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

如何用Pandas筛选并打印DataFrame中指定时间区间的行?

解决DataFrame时间区间筛选问题

嘿,这个问题我之前处理过不少!你现在的代码只能匹配单个时间点,要筛选整个2013年的时间区间,得先把时间列处理成正确的类型,再用合适的筛选方法,具体步骤如下:

第一步:确保时间列是datetime类型

首先检查你的localhour列是不是datetime格式——如果它现在是字符串(object类型),直接做区间比较可能会出问题(比如字符串排序逻辑和时间排序不一致)。你可以用下面的代码转换:

import pandas as pd

# 转换为datetime类型,如果有特殊格式可以指定format参数,比如format='%Y-%m-%d %H:%M:%S'
df['localhour'] = pd.to_datetime(df['localhour'])

# 可以用这个命令确认类型:print(df['localhour'].dtype),输出应该是datetime64[ns]之类的

第二步:筛选时间区间

有三种常用的方法,选你觉得顺手的就行:

方法1:布尔索引(最直观)

直接用大于等于起始时间、小于等于结束时间的条件组合,注意:每个条件必须用括号括起来,并且要用&(元素级逻辑与)而不是Python原生的and,否则会报错!

start = '2013-01-01 00:00:00'
end = '2013-12-31 00:00:00'

filtered_df = df.loc[(df['localhour'] >= start) & (df['localhour'] <= end)]
print(filtered_df)

方法2:用between()方法(更简洁)

pandas的between()方法可以直接帮你处理区间判断,代码更干净,自动处理了>=和<=的逻辑:

filtered_df = df.loc[df['localhour'].between(start, end)]
print(filtered_df)

方法3:设置时间索引后切片(适合大数据集)

如果你的DataFrame后续还要做很多时间相关操作,可以把localhour设为索引,然后用切片语法快速筛选,效率更高:

# 设置时间索引
df = df.set_index('localhour')
# 直接用索引切片筛选区间
filtered_df = df.loc['2013-01-01 00:00:00':'2013-12-31 00:00:00']
print(filtered_df)

# 如果之后需要恢复原来的索引,可以用:df = df.reset_index()

另外补充个小细节:如果你的结束时间是2013-12-31 00:00:00,那这个时间点之后的2013年12月31日的其他时间(比如2013-12-31 12:00:00)不会被包含进去。如果想覆盖整个2013年的所有数据,可以把结束时间设为2014-01-01 00:00:00,然后用<代替<=,这样就能包含2013年的最后一秒啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:20:25