舍弃熊猫时间戳到分钟

mch*_*gun 12 python pandas

我想DateTimeIndex基于开始和结束时间戳(以纪元以来的微秒给出)创建一个1分钟的间隔pd_date_range().为此,我需要将开始时间戳向上和结束时间戳向下舍入.这是我到目前为止:

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')
Run Code Online (Sandbox Code Playgroud)

我想要回合:

start_tsTimestamp('2014-07-28 00:32')

end_tsTimestamp('2014-07-28 08:14').

我怎样才能做到这一点?

Gus*_*rra 30

从版本0.18开始,Pandas具有内置的类似日期时间的舍入功能:

start_ts.round('min')  # Timestamp('2014-07-28 00:32:00')
end_ts.round('min')    # Timestamp('2014-07-28 08:14:00')
Run Code Online (Sandbox Code Playgroud)

您也可以使用.ceil或者.floor如果需要强制向上或向下舍入.


编辑:上面的代码使用原始pd.Timestamp,如OP所要求的.如果您正在使用a pd.Series,请使用dt访问者:

s = pd.Series(pd.to_datetime([1406507532491431000, 1406535228420914000]))
s.dt.round('min')
Run Code Online (Sandbox Code Playgroud)

输出:

0   2014-07-28 00:32:00
1   2014-07-28 08:14:00
dtype: datetime64[ns]
Run Code Online (Sandbox Code Playgroud)

  • 我的天啊!它就像魅力一样!但你必须使用"dt"访问器.df.ts.dt.round('5 min') (3认同)

小智 6

我有类似的问题,想要结束这一天.原来这是一种简单的方法(适用于Y [ear] M [月] D [ay],h [我们],m [inute],s [econd]).假设df是一个带有'datecol'列的pandas DataFrame:

df['datecol'] = df['datecol'].values.astype('<M8[m]')
Run Code Online (Sandbox Code Playgroud)

将它四舍五入到m [inute].鉴于我最初发现了这个问题,我想我会把我得到的答案联系起来,因为它看似相关,

使用pandas更有效地使用圆形日期时间戳


Jef*_*eff 5

在一个简单的方法,这样做是目前一个悬而未决的问题在这里

In [22]: start = 1406507532491431

In [23]: end = 1406535228420914

[26]: dti = pd.to_datetime([start,end],unit='us')

In [27]: dti
Out[27]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-07-28 00:32:12.491431, 2014-07-28 08:13:48.420914]
Length: 2, Freq: None, Timezone: None

In [29]: pd.DatetimeIndex(((dti.asi8/(1e9*60)).round()*1e9*60).astype(np.int64))
Out[29]: 
<class 'pandas.tseries.index.DatetimeIndex'>
[2014-07-28 00:32:00, 2014-07-28 08:14:00]
Length: 2, Freq: None, Timezone: None
Run Code Online (Sandbox Code Playgroud)

尽管如此,它非常直截了当.

欢迎提出拉动请求.