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