首页 > 解决方案 > 如何按时间过滤熊猫数据框

问题描述

我需要按时间过滤我的df。在读取 csv 文件时,我已将“S2Date”列解析为日期。对于 s2Time ,我使用df['S2Time'] = pd.to_datetime(df["S2Time"]) 了它的格式时间戳。现在我需要单独按时间找出或过滤df,即查找上午9点到中午12点之间的记录,或者考虑15:00到16:15之间的df以下。

我怎样才能做到这一点?我能够按日期过滤,但按时间过滤我遇到了问题。任何机构可以帮助或指出我正确的地方来学习它吗?

我的DF:

    S2Saleid        S2Date       S2Time 
0   180519011       2019-05-18  2020-08-13  15:15:00    
1   180519012       2019-05-18  2020-08-13  15:38:00    
2   180519013       2019-05-18  2020-08-13  15:47:00    
3   180519014       2019-05-18  2020-08-13  16:21:00    
4   180519014       2019-05-18  2020-08-13  16:21:00    

标签: pythonpandas

解决方案


您可以使用熊猫between_time方法。在按时间过滤之前将 datetime 列设置为索引:

df.index = df['S2Time']
df.between_time('15:00', '16:15')

# Out:
#                       S2Saleid      S2Date              S2Time
# S2Time                                                        
# 2020-08-13 15:15:00  180519011  2019-05-18 2020-08-13 15:15:00
# 2020-08-13 15:38:00  180519012  2019-05-18 2020-08-13 15:38:00
# 2020-08-13 15:47:00  180519013  2019-05-18 2020-08-13 15:47:00

或者即时设置索引以避免覆盖输入-df:

df.set_index('S2Time').between_time('15:00', '16:15').reset_index()

# Out:
#                S2Time   S2Saleid      S2Date
# 0 2020-08-13 15:15:00  180519011  2019-05-18
# 1 2020-08-13 15:38:00  180519012  2019-05-18
# 2 2020-08-13 15:47:00  180519013  2019-05-18

推荐阅读