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

时间:2020-08-03 10:46:01

标签: python pandas datetime rounding

我似乎找不到这个,但是我确定它在某处。我希望将时间戳取整到一微秒。其他舍入频率也可以使用,但是当我尝试将以下内容舍入到一个小数位时,则无法使用。

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

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