如何将Pandas Timedelta列转换为微秒(单行简洁实现)
如何将Pandas Timedelta列转换为微秒(不依赖内部存储类型)
我有一个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
我需要一行简洁的代码,生成一个新列,将该时间差转换为微秒,且无需假设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
我尝试过几种方法,其中最简洁的如下,但它依赖于Timedelta列内部为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
解决方案
使用Pandas Timedelta的.dt.total_seconds()方法,将总秒数转换为微秒后转为整数,完全不依赖内部存储类型:
tdiff_df['DiffUsec'] = (tdiff_df['TimeDiff'].dt.total_seconds() * 1_000_000).astype(int)
运行后得到期望的结果:
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
内容的提问来源于stack exchange,提问作者Gerard G
相关产品推荐
相关产品推荐

