Python 将时间戳舍入为分钟
我想使用Python 将时间戳舍入为分钟,python,pandas,Python,Pandas,我想使用pd\u date\u range()创建一个以1分钟为间隔的DateTimeIndex,该索引基于开始和结束时间戳(从纪元开始以微秒为单位)。为此,我需要向上舍入开始时间戳,向下舍入结束时间戳。以下是我到目前为止的情况: import pandas as pd start = 1406507532491431 end = 1406535228420914 start_ts = pd.to_datetime(start, unit='us') # Timestamp('2014-07-
pd\u date\u range()
创建一个以1分钟为间隔的DateTimeIndex
,该索引基于开始和结束时间戳(从纪元开始以微秒为单位)。为此,我需要向上舍入开始时间戳,向下舍入结束时间戳。以下是我到目前为止的情况:
import pandas as pd
start = 1406507532491431
end = 1406535228420914
start_ts = pd.to_datetime(start, unit='us') # Timestamp('2014-07-28 00:32:12.491431')
end_ts = pd.to_datetime(end, unit='us') # Timestamp('2014-07-28 08:13:48.420914')
我想转一圈:
开始
至时间戳('2014-07-28 00:32')
和
结束
至时间戳('2014-07-28 08:14')
如何做到这一点?用简单的方法做到这一点目前是一个悬而未决的问题
import pandas as pd
new_index = pd.date_range(start=start_ts.strftime('%Y-%m-%d %H:%M'), end=end_ts.strftime('%Y-%m-%d %H:%M'), freq='1min')
[22]中的start=14065075352491431
In[23]:end=1406535228420914
[26]:dti=pd.to_datetime([start,end],unit='us'))
In[27]:dti
出[27]:
[2014-07-28 00:32:12.491431, 2014-07-28 08:13:48.420914]
长度:2,频率:无,时区:无
在[29]中:pd.DatetimeIndex(((dti.asi8/(1e9*60)).round()*1e9*60.astype(np.int64))
出[29]:
[2014-07-28 00:32:00, 2014-07-28 08:14:00]
长度:2,频率:无,时区:无
尽管如此,它还是相当直截了当的
我们欢迎拉取请求来实现。我也遇到了类似的问题,我想结束这一天。事实证明有一个简单的方法(它适用于Y[ear]M[month]D[ay],h[our],M[inute],s[second])。假设df是一个包含列“datecol”的数据帧:
df['datecol'] = df['datecol'].values.astype('<M8[m]')
df['datecol']=df['datecol'].values.astype('如@user3735204所述,可以使用以下内容对列进行四舍五入:
df['datecol'] = df['datecol'].astype('datetime64[m]')
方括号中的单位可以是:
Y[ear] M[month] D[ay], h[our], m[inute], s[econd]
也可以通过将列作为索引并应用舍入方法(可在0.19.0中获得),舍入到最近的()
示例:
df = pd.DataFrame(data = tmpdata)
df['datecol'] = df['datecol'].astype('datetime64[s]')
print df['datecol']
0 2016-10-05 05:37:42
1 2016-10-05 05:37:43
Name: datecol, dtype: datetime64[ns]
df.index = pd.to_datetime(df['datecol'])
df.index = df.index.round("S")
print df.index
DatetimeIndex(['2016-10-05 05:37:43', '2016-10-05 05:37:43'], dtype='datetime64[ns]', name=u'timestamp', freq=None)
自版本0.18起,Pandas已内置:
如果需要强制向上或向下舍入,也可以使用.ceil
或.floor
编辑:
根据OP的要求,上述代码适用于原始pd.时间戳
。如果您使用的是pd.系列
,请使用dt
访问器:
s = pd.Series(pd.to_datetime([1406507532491431000, 1406535228420914000]))
s.dt.round('min')
输出:
0 2014-07-28 00:32:00
1 2014-07-28 08:14:00
dtype: datetime64[ns]
数据索引四舍五入('60秒'
大约60秒。您期望的输出是什么?看起来Jeff已经完成了这个实现,即将进入v0.18.0:谢谢!天哪!它工作起来很有魅力!但是您必须使用“dt”访问器。df.ts.dt.round('5分钟'))
start_ts.round('min') # Timestamp('2014-07-28 00:32:00')
end_ts.round('min') # Timestamp('2014-07-28 08:14:00')
s = pd.Series(pd.to_datetime([1406507532491431000, 1406535228420914000]))
s.dt.round('min')
0 2014-07-28 00:32:00
1 2014-07-28 08:14:00
dtype: datetime64[ns]