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

