我似乎找不到这个,但是我确定它在某处。我希望将时间戳取整到一微秒。其他舍入频率也可以使用,但是当我尝试将以下内容舍入到一个小数位时,则无法使用。
df = pd.DataFrame({
'time' : ['2019-08-02 09:50:10.040','2019-08-02 09:50:10.080','2019-08-02 09:50:10.170','2019-08-02 09:50:10.180'],
})
df['time'] = pd.to_datetime(df['time'])
df["time"] = df.time.dt.round("1L")
预期输出:
time
0 2019-08-02 09:50:10.0
1 2019-08-02 09:50:10.1
2 2019-08-02 09:50:10.2
3 2019-08-02 09:50:10.2
答案 0 :(得分:2)
我认为您可能忽略了offset aliases的组合。
在您的情况下,以100L
括起来应该可以给出正确的答案。 100L
将使用100毫秒(或0.1秒)的仲裁取整,这正是您在这种情况下需要的。您正在使用1L
,它已经是数据框中的默认值。
df = pd.DataFrame({
'time' : ['2019-08-02 09:50:10.040','2019-08-02 09:50:10.080','2019-08-02 09:50:10.170','2019-08-02 09:50:10.180'],
})
df['time'] = pd.to_datetime(df['time'])
df['time'] = df.time.dt.round('100L')
输出为:
0 2019-08-02 09:50:10.000
1 2019-08-02 09:50:10.100
2 2019-08-02 09:50:10.200
3 2019-08-02 09:50:10.200
多余的零不能被截断,但是从计算的角度来看,您将获得预期的结果。
答案 1 :(得分:1)
一种解决方案是:
df["time"] = df.time.dt.round("100ms")
输出
time
0 2019-08-02 09:50:10.000
1 2019-08-02 09:50:10.100
2 2019-08-02 09:50:10.200
3 2019-08-02 09:50:10.200
以下是所有有效的字符串:
'A': 'A-DEC',
'AS': 'AS-JAN',
'BA': 'BA-DEC',
'BAS': 'BAS-JAN',
'BY': 'BA-DEC',
'BYS': 'BAS-JAN',
'Min': 'T',
'Q': 'Q-DEC',
'W': 'W-SUN',
'Y': 'A-DEC',
'YS': 'AS-JAN',
'min': 'T',
'ms': 'L',
'ns': 'N',
'us': 'U',