如何在日期时间系列中添加一小时“列”,只需几分钟和几秒钟

时间:2016-03-23 13:44:46

标签: python datetime pandas

我有一个pandas数据帧,其列有分钟和秒(日期时间)。时间序列持续几个小时,所以当一个新的小时开始时,分钟和秒数从0开始。我想在每次翻身时加上一小时的日期时间。有没有人对一个简单的方法有任何建议?

加载我的数据的代码

if ($button.text() == "+") {
  var newVal = parseFloat(oldValue) < 9 ? parseFloat(oldValue) + 1 : parseFloat(oldValue);
}

我的datetime列现在的样子。

TempDataFrame = pandas.read_csv(filepath_or_buffer=TempDataFilePath, header=0, sep=',', skiprows = 7, encoding='latin-1')
TempDataFrame['Date/Time'] =  pandas.to_datetime(TempDataFrame['Date/Time'], format='%M:%S.%f')

我想最终得到的例子

1900-01-01 0:27:58
1900-01-01 0:27:59
1900-01-01 0:28:00
1900-01-01 0:28:01
........
1900-01-01 0:59:57
1900-01-01 0:59:58
1900-01-01 0:59:59
1900-01-01 0:00:00
1900-01-01 0:00:01
1900-01-01 0:00:02
........
1900-01-01 0:59:57
1900-01-01 0:59:58
1900-01-01 0:59:59
1900-01-01 0:00:00
1900-01-01 0:00:01
1900-01-01 0:00:02
etc...

1 个答案:

答案 0 :(得分:2)

IIUC然后这将起作用:

In [175]:
df['datetime'] = df['datetime'] + pd.TimedeltaIndex((df['datetime'] < df['datetime'].shift()).cumsum(), 'H')
df

Out[175]:
              datetime
0  1900-01-01 00:27:58
1  1900-01-01 00:27:59
2  1900-01-01 00:28:00
3  1900-01-01 00:28:01
4  1900-01-01 00:59:57
5  1900-01-01 00:59:58
6  1900-01-01 00:59:59
7  1900-01-01 01:00:00
8  1900-01-01 01:00:01
9  1900-01-01 01:00:02
10 1900-01-01 01:59:57
11 1900-01-01 01:59:58
12 1900-01-01 01:59:59
13 1900-01-01 02:00:00
14 1900-01-01 02:00:01
15 1900-01-01 02:00:02

因此,这会使用shift将日期时间与上一行进行比较,如果是这样,当时间小于上一行时,这将返回True,因为hour组件保持为0,我们在此致电cumsum()

In [178]:
(df['datetime'] < df['datetime'].shift()).cumsum()

Out[178]:
0     0
1     0
2     0
3     0
4     0
5     0
6     0
7     1
8     1
9     1
10    1
11    1
12    1
13    2
14    2
15    2
Name: datetime, dtype: int32

然后我们使用它来生成TimedeltaIndex,以便为每个日期时间添加Series个小时