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

如何筛选Pandas DataFrame中指定时间段内的所有条目(时间为Series类型)

筛选Pandas DataFrame中特定时间段的数据

问题场景

现有如下DataFrame,time列为字符串格式,需要筛选出**中午12点到晚上10点(12:00:00 ~ 22:00:00)**之间的数据:

my_dataframe = pd.DataFrame({'time': ["2024-1-1 09:00:00", "2024-1-1 15:00:00", "2024-1-1 21:00:00", "2024-1-2 09:00:00", "2024-1-2 15:00:00", "2024-1-2 21:00:00"],
                   'assists': [5, 7, 7, 9, 12, 9],
                   'rebounds': [11, 8, 10, 6, 6, 5],
                   'blocks': [4, 7, 7, 6, 5, 8]})

问题分析

  • between_time方法仅适用于DatetimeIndex,直接对字符串列调用会报错;
  • to_timestamp是针对索引的方法,不能直接用于Series,所以执行my_dataframe.iloc[:,0].to_timestamp()会抛出"unsupported Type RangeIndex"错误。

解决方法

核心是先将字符串格式的time列转换为datetime类型,再进行筛选,以下两种方法任选:

方法1:直接提取时间部分筛选

# 1. 将time列转换为datetime类型
my_dataframe['time'] = pd.to_datetime(my_dataframe['time'])

# 2. 定义时间范围
start = pd.to_datetime('12:00:00').time()
end = pd.to_datetime('22:00:00').time()

# 3. 筛选符合条件的数据
filtered_df = my_dataframe[(my_dataframe['time'].dt.time >= start) & (my_dataframe['time'].dt.time <= end)]

方法2:设置DatetimeIndex后用between_time

# 1. 转换time列为datetime并设置为索引
my_dataframe.index = pd.to_datetime(my_dataframe['time'])

# 2. 调用between_time筛选时间段
filtered_df = my_dataframe.between_time('12:00', '22:00')

# 可选:重置索引,恢复原数据结构
filtered_df = filtered_df.reset_index(drop=False)

两种方法最终都会得到目标行(原数据的15:00、21:00记录)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 01:07:15