如何按时间过滤熊猫数据框

时间:2020-12-30 16:47:51

标签: python pandas

我需要根据时间过滤我的 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    

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

以下也有效,

time1 = pd.to_datetime('2020-08-13  15:00:00').strftime('%H:%M')
time2 = pd.to_datetime('2020-01-01  16:15:00').strftime('%H:%M')
df.loc[(df['S2Time'].dt.strftime('%H:%M') > time1 ) & (df['S2Time'].dt.strftime('%H:%M') < time2)]