如何从 Pandas DataFrame.Index 中的 datetime.time 类型对象中加/减时间(小时、分钟等)?

109

我有一个DataFrame,其索引仅为datetime.time,但是在DataFrame.Index和datetime.time中没有移动时间的方法。datetime.time具有replace方法,但这仅适用于Series的单个项?

以下是使用的索引的示例:

In[526]:  dfa.index[:5]
Out[526]: Index([21:12:19, 21:12:20, 21:12:21, 21:12:21, 21:12:22], dtype='object')

In[527]:  type(dfa.index[0])
Out[527]: datetime.time

4
https://dev59.com/DWIj5IYBdhLWcg3w2olr - Liam Foley
type(df.index)的输出是什么? - Mostafa Mahmoud
@MostafaMahmoud pandas.core.index.Index 但如果我键入(df.index[0]),那就是datetime.time。 - Cameron Stark
@DreamAwake 使用 pandas.Timestamp() 将当前索引转换为时间戳索引,然后随心所欲地处理它。 - Mostafa Mahmoud
3个回答

150

3
使用df.index + pd.Timedelta(hours=12)会出现错误"TypeError: unsupported operand type(s) for +: 'numpy.ndarray' and 'Timedelta'"。索引本身是pandas.core.index.Index类型,但每个值都是datetime.time类型,这会干扰tshift()方法以及Timedelta加法操作。 - Cameron Stark
请参考Mostafa在您原始问题中关于转换为“时间戳”的评论。 - Alex
发布了。如果需要更多细节,请告诉我。感谢您的帮助! - Cameron Stark
2
df_series.index = (df_series.index + pd.Timedelta(days=1))数据框系列.index = (数据框系列.index + pd.Timedelta(days=1)) - jjcf89
周期是用来做什么的? - thentangler
显示剩余2条评论

4

这个方法对我来说有效:

>> print(df)
                          TotalVolume  Symbol
2016-04-15 09:00:00       108400       2802.T
2016-04-15 09:05:00       50300        2802.T

>> print(df.set_index(pd.to_datetime(df.index.values) - datetime(2016, 4, 15)))

             TotalVolume  Symbol
09:00:00     108400       2802.T
09:05:00     50300        2802.T

0

更简洁的Philippe解决方案:

我的减法数据是:'2018-09-22T11:05:00.000Z'

import datetime
import pandas as pd

df_modified = pd.to_datetime(df_reference.index.values) - datetime.datetime(2018, 9, 22, 11, 5, 0)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接