熊猫将时间序列增加一分钟

时间:2014-11-19 07:17:25

标签: datetime pandas time-series

我的数据是here

如果该列中的值包含“23:59:00”,我想在STA_STD中添加一分钟以获得5分钟的常规时间序列。添加一分钟也应该更改为第二天00:00小时。

我的代码在这里

 dat=pd.read_csv("temp.csv")
 if(dat['STA_STD'].str.contains("23:59:00")):
     dat['STA_STD_NEW']= pd.to_datetime(dat[dat['STA_STD'].str.contains("23:59:00")]         ['STA_STD'])+datetime.timedelta(minutes=1)
 else:
     dat['STA_STD_NEW'] = dat['STA_STD']

这给了我以下错误:

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Pandas文档here讨论了同样的错误。

如果值包含“23:59:00”,迭代所有行并递增值一分钟的过程是什么?

请告知。

1 个答案:

答案 0 :(得分:1)

两件事:

  • 您不能同时使用if / else来评估多个值(您需要迭代这些值,然后分别对每个值执行if / else)。但在这种情况下使用布尔索引要好得多。
  • str.contains不适用于日期时间。但您可以检查日期时间值的time部分是否等于datetime.time(23, 59)

一个小例子:

In [2]: dat = pd.DataFrame({'STA_STD':pd.date_range('2012-01-01 23:50', periods=10, freq='1min')})

In [3]: dat['STA_STD_NEW'] = dat['STA_STD']

In [4]: dat.loc[dat['STA_STD'].dt.time == datetime.time(23,59), 'STA_STD_NEW'] += datetime.timedelta(minutes=1)

In [5]: dat
Out[5]:
              STA_STD         STA_STD_NEW
0 2012-01-01 23:50:00 2012-01-01 23:50:00
1 2012-01-01 23:51:00 2012-01-01 23:51:00
2 2012-01-01 23:52:00 2012-01-01 23:52:00
3 2012-01-01 23:53:00 2012-01-01 23:53:00
4 2012-01-01 23:54:00 2012-01-01 23:54:00
5 2012-01-01 23:55:00 2012-01-01 23:55:00
6 2012-01-01 23:56:00 2012-01-01 23:56:00
7 2012-01-01 23:57:00 2012-01-01 23:57:00
8 2012-01-01 23:58:00 2012-01-01 23:58:00
9 2012-01-01 23:59:00 2012-01-02 00:00:00    <-- increment of 1 minute 

使用dt.time方法需要pandas&gt; = 0.15