Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/135.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将时间戳舍入为分钟_Python_Pandas - Fatal编程技术网

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]