首页 > 解决方案 > Python csv:将具有毫秒值的日期时间列分组,间隔为 15 分钟,并添加一个具有时间桶名称的新 csv 列

问题描述

我有 csv 列,其日期时间值低于毫秒值。

20-07-10 16:00:08.155
20-07-10 16:10:30.745
20-07-10 16:34:09.246
20-07-10 16:46:00.961
20-07-10 16:56:04.129
20-07-10 17:06:09.536
20-07-10 18:06:26.568
20-07-10 18:26:36.569
20-07-10 18:36:50.560
20-07-10 18:47:06.114
20-07-10 18:57:25.397

我需要按每小时 15 分钟对时间进行分组,并添加一个开始时间为 15 分钟间隔的新列。输出应该在 csv 中有一个额外的列,时间桶如下所示。

20-07-10 16:00:08.155       20-07-10 16:00
20-07-10 16:10:30.745       20-07-10 16:00
20-07-10 16:34:09.246       20-07-10 16:30
20-07-10 16:46:00.961       20-07-10 16:45
20-07-10 16:56:04.129       20-07-10 16:45
20-07-10 17:06:09.536       20-07-10 17:00
20-07-10 18:06:26.568       20-07-10 18:00
20-07-10 18:26:36.569       20-07-10 18:15
20-07-10 18:36:50.560       20-07-10 18:30
20-07-10 18:47:06.114       20-07-10 18:45
20-07-10 18:57:25.397       20-07-10 18:45

我现在的代码如下所示

import pandas as pd
from datetime import datetime

in_path = "input.csv"
df = pd.read_csv(in_path)
time_utc = df['DATE_TIME_2'] # in csv file, "DATE_TIME_2" column has the datetime value.
print(time_utc)
time_utc['time_bucket'] = time_utc.apply(lambda x: "perdio_%d"%(int(x['DATE_TIME_2'].minute/15)))
print(time_utc)

但上面的代码给了我以下错误:

TypeError:字符串索引必须是整数

如果我使用以下任何一种而不是 lambda,

time_utc.groupby(pd.Grouper(freq='15Min')).first()
time_utc.resample('15min').first()

我收到以下错误:

TypeError:仅对 DatetimeIndex、TimedeltaIndex 或 PeriodIndex 有效,但获得了“RangeIndex”实例

标签: python-3.xpandasdataframecsvdatetime

解决方案


使用Series.dt.floor

time_utc['time_bucket'] = time_utc['DATE_TIME_2'].dt.floor('15Min')
print (time_utc)
               DATE_TIME_2         time_bucket
0  2010-07-20 16:00:08.155 2010-07-20 16:00:00
1  2010-07-20 16:10:30.745 2010-07-20 16:00:00
2  2010-07-20 16:34:09.246 2010-07-20 16:30:00
3  2010-07-20 16:46:00.961 2010-07-20 16:45:00
4  2010-07-20 16:56:04.129 2010-07-20 16:45:00
5  2010-07-20 17:06:09.536 2010-07-20 17:00:00
6  2010-07-20 18:06:26.568 2010-07-20 18:00:00
7  2010-07-20 18:26:36.569 2010-07-20 18:15:00
8  2010-07-20 18:36:50.560 2010-07-20 18:30:00
9  2010-07-20 18:47:06.114 2010-07-20 18:45:00
10 2010-07-20 18:57:25.397 2010-07-20 18:45:00

推荐阅读