为了账号安全,请及时绑定邮箱和手机立即绑定

Python tz 感知 str 到日期时间对象以进行重新采样计算

Python tz 感知 str 到日期时间对象以进行重新采样计算

侃侃无极 2023-12-12 20:31:37
我有以下 tz 感知字符串。我想对此数据使用 data.resample('D') 操作。我在将其转换为正确的格式时遇到一些麻烦。我尝试过使用 pd.to_datetime 但在尝试使用重新采样时出现以下错误。类型错误:仅对 DatetimeIndex、TimedeltaIndex 或 periodIndex 有效,但获得了“Index”的实例>>> test1['timestamp']0        2017-01-03 08:30:00-06:001        2017-01-03 08:30:32-06:002        2017-01-03 08:30:42-06:003        2017-01-03 08:30:46-06:004        2017-01-03 08:30:52-06:00                   ...            65334    2017-12-29 14:55:02-06:0065335    2017-12-29 14:55:26-06:0065336    2017-12-29 14:55:54-06:0065337    2017-12-29 14:59:23-06:0065338    2017-12-29 14:59:46-06:00Name: timestamp, Length: 65339, dtype: object实现这一目标的最佳方法是什么?
查看完整描述

1 回答

?
慕慕森

TA贡献1856条经验 获得超17个赞

您的错误消息以Only valid with DatetimeIndex ,...开头。


因此,在将时间戳列转换为datetime后,从中创建一个DatetimeIndex(并保存它以供将来使用):


ind = pd.DatetimeIndex(pd.to_datetime(df.timestamp))

结果是:


DatetimeIndex(['2017-01-03 08:30:00-06:00', '2017-01-03 08:30:32-06:00',

               '2017-01-03 08:30:42-06:00', '2017-01-03 08:30:46-06:00',

               '2017-01-03 08:30:52-06:00'],

              dtype='datetime64[ns, pytz.FixedOffset(-360)]', name='timestamp', freq=None)

或者也许您应该根据上述公式在 DataFrame 中设置索引:


wrk = df.set_index(pd.DatetimeIndex(pd.to_datetime(df.timestamp)))\

    .drop(columns=['timestamp'])

然后重新索引它(使用一些聚合函数),例如:


wrk.resample('15s').sum()

我将源df创建为:


                   timestamp  amount

0  2017-01-03 08:30:00-06:00      12

1  2017-01-03 08:30:32-06:00      14

2  2017-01-03 08:30:42-06:00      17

3  2017-01-03 08:30:46-06:00      19

4  2017-01-03 08:30:52-06:00      23

并得到以下结果:


                           amount

timestamp                        

2017-01-03 08:30:00-06:00      12

2017-01-03 08:30:15-06:00       0

2017-01-03 08:30:30-06:00      31

2017-01-03 08:30:45-06:00      42


查看完整回答
反对 回复 2023-12-12
  • 1 回答
  • 0 关注
  • 38 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信