Pandas选择24小时内最后一分钟的数据

2024-05-17 11:34:56 发布

您现在位置:Python中文网/ 问答频道 /正文

熊猫初学者。在

我有一个以分钟为单位的24小时时间序列,在a列中有一个累积值:

Time                Energy
11-01-2017 10:14    19.14634168
11-01-2017 10:15    19.14702618
11-01-2017 10:16    19.14719065
11-01-2017 10:17    19.14719065
…   
11-01-2017 23:56    19.47694149
11-01-2017 23:57    19.4771605
11-01-2017 23:58    19.47753776
11-01-2017 23:59    19.47801377

我想知道每小时结束时A列的值是多少(dd-mm-yyy hh:59),并将此数据保存在csv文件中,并添加一个额外的列来显示小时。结果如下:

^{pr2}$

我是应该基于seconds值59迭代timeseries,还是更容易地每隔60行在A列中提取值,因为总是有1440行(1440分钟)?在


Tags: 文件csv数据timehh时间单位序列
2条回答

如果您所说的时间值是规则的,没有间隔,则可以将切片语义与步骤参数一起使用:

df.iloc[::60]

如果第一个条目不是第一分钟,如您所示,那么只需偏移第一个参数:

^{pr2}$

因为第14分钟是45分钟,第59分钟

计时

In [176]:
s = pd.date_range(dt.datetime(2016,1,1), freq='1min', periods=10000)
s

Out[176]:
DatetimeIndex(['2016-01-01 00:00:00', '2016-01-01 00:01:00',
               '2016-01-01 00:02:00', '2016-01-01 00:03:00',
               '2016-01-01 00:04:00', '2016-01-01 00:05:00',
               '2016-01-01 00:06:00', '2016-01-01 00:07:00',
               '2016-01-01 00:08:00', '2016-01-01 00:09:00',
               ...
               '2016-01-07 22:30:00', '2016-01-07 22:31:00',
               '2016-01-07 22:32:00', '2016-01-07 22:33:00',
               '2016-01-07 22:34:00', '2016-01-07 22:35:00',
               '2016-01-07 22:36:00', '2016-01-07 22:37:00',
               '2016-01-07 22:38:00', '2016-01-07 22:39:00'],
              dtype='datetime64[ns]', length=10000, freq='T')

In [179]:    
%timeit s[s.minute == 59]
%timeit s[::60]

1000 loops, best of 3: 639 µs per loop
10000 loops, best of 3: 27.5 µs per loop

所以切片速度快了20倍

您可以使用:

df.Time = pd.to_datetime(df.Time)
df['hour'] = df.Time.dt.hour + 1
df1 = df[df.Time.dt.minute == 59]

print (df1)
                 Time     Energy  hour
7 2017-11-01 23:59:00  19.478014    24

相关问题 更多 >