我想在指定的时间戳范围内从数据帧中选择行子集。
下面是我所做的,但它似乎不工作。我试图选择发生在2019年1月1日01:00和2021年1月1日01:00之间的行子集。
谢谢!
df.loc[(df['TIMESTAMP'] == "01/01/2019 01:00"): (df['TIMESTAMP'] == "01/01/2021 01:00")]
我创建了一个测试DataFrame
TIMESTAMP Amount
0 01/01/2019 00:00 101.0
1 01/01/2019 01:00 102.0
2 01/01/2019 02:00 103.0
3 01/05/2019 01:00 104.0
4 02/02/2020 00:00 105.0
5 01/01/2021 00:00 106.0
6 01/01/2021 01:00 107.0
7 01/01/2021 02:00 108.0
8 01/02/2021 01:00 109.0
注意TIMESTAMP列是对象类型(实际上它保存字符串)。当你使用"/"作为分隔符,我假设使用美国日期格式,即mm/dd/yyyy。第一步是将TIMESTAMP列转换为datetime类型:
df.TIMESTAMP = pd.to_datetime(df.TIMESTAMP)
如果你现在打印df,它将包含:
TIMESTAMP Amount
0 2019-01-01 00:00:00 101.0
1 2019-01-01 01:00:00 102.0
2 2019-01-01 02:00:00 103.0
3 2019-01-05 01:00:00 104.0
4 2020-02-02 00:00:00 105.0
5 2021-01-01 00:00:00 106.0
6 2021-01-01 01:00:00 107.0
7 2021-01-01 02:00:00 108.0
8 2021-01-02 01:00:00 109.0
(这是Pandas格式化时间戳的方式)。
现在,要获得在预期日期时间范围内的行,请运行:
result = df.query('TIMESTAMP.between("2019-01-01 01:00", "2021-01-01 01:00")')
注意,虽然TIMESTAMP列现在是datetime类型,您可以将日期时间指定为string.
结果是:
TIMESTAMP Amount
1 2019-01-01 01:00:00 102.0
2 2019-01-01 02:00:00 103.0
3 2019-01-05 01:00:00 104.0
4 2020-02-02 00:00:00 105.0
5 2021-01-01 00:00:00 106.0
6 2021-01-01 01:00:00 107.0