将时间戳舍入到微秒 - 熊猫

我似乎找不到这个,但我确定它在 SO 的某个地方。我希望将时间戳四舍五入到一微秒。其他舍入频率正在工作,但是当我尝试将以下舍入到一个小数位时它不起作用。


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


Qyouu
浏览 144回答 2
2回答

白衣非少年

我认为您可能忽略了组合偏移量别名。四舍五入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.0001   2019-08-02 09:50:10.1002   2019-08-02 09:50:10.2003   2019-08-02 09:50:10.200额外的零不能被截断,但在计算方面,您将获得预期的结果。

蛊毒传说

一种解决方案是:df["time"] = df.time.dt.round("100ms")输出                     time0 2019-08-02 09:50:10.0001 2019-08-02 09:50:10.1002 2019-08-02 09:50:10.2003 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',
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python