Datetime 熊猫将时间序列增加一分钟
我的数据是 如果该列中的值包含“23:59:00”,我想向STA_STD中的值添加一分钟,以获得5分钟的常规时间序列。添加一分钟也应将日期更改为第二天00:00小时 我的密码在这里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")]
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)。但在这种情况下,使用布尔索引要好得多
不适用于日期时间。但是您可以检查datetime值的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
[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)