我有一个 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
由于您已使用“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