【问题标题】:Python csv: group datetime column having millisecond value with interval of 15 minutes and add a new csv column with time-bucket namePython csv:将具有毫秒值的日期时间列分组,间隔为 15 分钟,并添加一个具有时间桶名称的新 csv 列
【发布时间】:2020-09-23 10:55:38
【问题描述】:

我有 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.x pandas dataframe csv datetime


【解决方案1】:

使用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

【讨论】:

  • 您好,这非常有效!唯一的问题是从 CSV 读取的值不是日期时间值,因此我收到 [raise AttributeError("Can only use .dt accessor with datetimelike values")] 错误。为了解决这个问题,在 [time_utc = df['DATETIME_UTC']]] 行之前添加了 [df['DATETIME_UTC'] = pd.to_datetime(df['DATETIME_UTC'], errors='coerce')] 行
猜你喜欢
  • 1970-01-01
  • 2016-11-24
  • 1970-01-01
  • 2023-01-19
  • 1970-01-01
  • 2022-07-21
  • 2011-03-28
  • 1970-01-01
  • 2016-07-10
相关资源
最近更新 更多