我想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_ts去Timestamp('2014-07-28 00:32')和
end_ts到Timestamp('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)
小智 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].鉴于我最初发现了这个问题,我想我会把我得到的答案联系起来,因为它看似相关,
在一个简单的方法,这样做是目前一个悬而未决的问题在这里
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)
尽管如此,它非常直截了当.
欢迎提出拉动请求.
| 归档时间: |
|
| 查看次数: |
14814 次 |
| 最近记录: |