如何用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
相关产品推荐
相关产品推荐

