为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Qyouu 2023-04-25 16:37:29
我似乎找不到这个,但我确定它在 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")预期输出:                     time0 2019-08-02 09:50:10.01 2019-08-02 09:50:10.12 2019-08-02 09:50:10.23 2019-08-02 09:50:10.2
查看完整描述

2 回答

?
白衣非少年

TA贡献1155条经验 获得超0个赞

我认为您可能忽略了组合偏移量别名。

四舍五入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

额外的零不能被截断,但在计算方面,您将获得预期的结果。


查看完整回答
反对 回复 2023-04-25
?
蛊毒传说

TA贡献1895条经验 获得超3个赞

一种解决方案是:


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',


查看完整回答
反对 回复 2023-04-25
  • 2 回答
  • 0 关注
  • 113 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信