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

Datetime 熊猫将时间序列增加一分钟,datetime,pandas,time-series,Datetime,Pandas,Time Series,我的数据是 如果该列中的值包含“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")]

我的数据是

如果该列中的值包含“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().
熊猫文档也谈到了同样的错误

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

请告知。

两件事:

  • 不能使用if/else这样的方法同时计算多个值(需要迭代这些值,然后分别对每个值执行if/else)。但在这种情况下,使用布尔索引要好得多
  • str.contains
    不适用于日期时间。但是您可以检查datetime值的
    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 
[2]中的
:dat=pd.DataFrame({'STA_STD':pd.date_range('2012-01-01 23:50',句点=10,频率=1min'))
在[3]中:dat['STA_STD_NEW']=dat['STA_STD']
在[4]中:dat.loc[dat['STA_STD'].dt.time==datetime.time(23,59),'STA_STD_NEW']+=datetime.timedelta(分钟=1)
In[5]:dat
出[5]:
STA_STD STA_STD_新
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=0.15

@Jeff,你能用样本解释一下你的方法吗code@Chandra@Jeff意味着您可以用
pd.timedelta('1分钟')替换
datetime.timedelta(分钟=1)