我有一个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列的内部dtype是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 nsecs,并且需要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
3条答案
按热度按时间cwxwcias1#
另一种方法是使用
total_seconds()
方法,该方法将返回每个Timedelta
的总持续时间(以秒为单位)。将结果乘以1,000,000,因为每秒有1,000,000微秒,这将给予您所需的微秒值。正如您所指出的,这应该处理毫秒的分数。这导致
mwyxok5s2#
因为你已经用'ms'初始化了你的数据,你可以把它作为一个新的列:
输出量:
但是如果你的timedelta有不同的初始化,纳秒或微秒,你可以通过
dt.components
属性来获得它们:输出量:
kx7yvsdv3#
经过一堆更多的尝试,这里有一个隐藏的宝石,被埋在Pandas文档。