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

如何用Pandas筛选DataFrame中特定时间段及指定条件的数据

解决DataFrame使用between_time报错及时间段筛选问题

报错原因

between_time方法要求DataFrame的索引必须是DatetimeIndex,你的time列只是普通数据列而非索引,因此触发TypeError。下面提供两种可行的解决方案:


方案一:将time列转为DatetimeIndex后使用between_time

这种方法符合between_time的使用要求,适合需要频繁基于时间索引操作的场景:

import pandas as pd

# 构造示例数据
df = pd.DataFrame({
    'fruit': ['apple', 'banana', 'apple'],
    'time': ['2021-12-20 17:55:00', '2021-12-23 05:13:00', '2021-12-20 17:55:00']
})

# 1. 先将time列转换为datetime类型(若原始数据不是datetime格式必须执行)
df['time'] = pd.to_datetime(df['time'])

# 2. 将time列设置为DataFrame的索引
df = df.set_index('time')

# 3. 筛选17:00:00至18:00:00的数据
time_filtered = df.between_time('17:00:00', '18:00:00')

# 4. 进一步筛选fruit为"apple"的行
final_df = time_filtered[time_filtered['fruit'] == 'apple']

# 可选:重置索引,把time列还原为普通数据列
final_df = final_df.reset_index()

方案二:不修改索引,直接提取时间维度筛选

无需调整DataFrame结构,通过提取时间的时分秒属性直接组合筛选条件,更灵活:

import pandas as pd

df = pd.DataFrame({
    'fruit': ['apple', 'banana', 'apple'],
    'time': ['2021-12-20 17:55:00', '2021-12-23 05:13:00', '2021-12-20 17:55:00']
})

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

# 组合条件:时间在17:00-18:00之间,且fruit为apple
# 方式1:按小时快速判断
final_df = df[(df['time'].dt.hour == 17) & (df['fruit'] == 'apple')]

# 方式2:精确到时分秒的判断(覆盖17:00:00至18:00:00的所有时间点)
final_df = df[
    (df['time'].dt.time >= pd.to_datetime('17:00:00').time()) &
    (df['time'].dt.time <= pd.to_datetime('18:00:00').time()) &
    (df['fruit'] == 'apple')
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 14:10:40