将 Pandas 系列从 Timedelta 转换为微秒

问题描述 投票:0回答:1

我有一个 Pandas

Timedelta
列,可以像这样创建:

import pandas as pd
tdelta_ser = pd.date_range(start='00:00:00', periods=3, freq='700ms') - pd.date_range(start='00:00:00', periods=3, freq='500ms') 
tdiff_df = pd.DataFrame(tdelta_ser, columns=['TimeDiff'])
print(tdiff_df)

                TimeDiff
0        0 days 00:00:00
1 0 days 00:00:00.200000
2 0 days 00:00:00.400000

寻找一个非常简洁的one liner,它将生成一个新列,并将该时间增量转换为微秒,而不假设pandas Timedelta列的内部数据类型为int64纳秒。

想要的结果


               TimeDiff  DiffUsec
0        0 days 00:00:00         0
1 0 days 00:00:00.200000    200000
2 0 days 00:00:00.400000    400000

我尝试了几种方法。最简洁的是下面的一个,但它假设 Timedetla 列的内部工作为 int64 纳秒,并且需要 1000 的缩放因子才能正确。

tdiff_df['DiffUsec'] = tdiff_df['TimeDiff'].astype('int64') / 1000
print(tdiff_df)

                TimeDiff  DiffUsec
0        0 days 00:00:00       0.0
1 0 days 00:00:00.200000  200000.0
2 0 days 00:00:00.400000  400000.0
python pandas time-series timestamp timedelta
1个回答
0
投票

由于您已使用“ms”初始化数据,因此您可以将其作为新列:

tdiff_df['TimeDiff'].dt.components.milliseconds

输出:

0      0
1    200
2    400
Name: milliseconds, dtype: int64

但是如果你的 timedelta 有不同的初始化,纳秒或微秒,你可以通过

dt.components
属性获得这些:

print(tdiff_df['TimeDiff'].dt.components)

输出:

  days  hours  minutes  seconds  milliseconds  microseconds  nanoseconds
0     0      0        0        0             0             0            0
1     0      0        0        0           200             0            0
2     0      0        0        0           400             0            0
© www.soinside.com 2019 - 2024. All rights reserved.