<p>一开始我以为这里没有正确的答案,因为没有绿色的滴答声。但正如杰夫在评论中指出的,我错了。</p>
<p>不管怎样,这都是我的贡献。</p>
<p>首先,显而易见的是,将<code>datetime.time</code>变成<code>timedelta</code></p>
<pre><code>df['delta'] = (pd.to_timedelta(df.time2.astype(str)) - pd.to_timedelta(df.time1.astype(str)))
time1 time2 delta
0 13:00:07.294234 13:00:07.294234 00:00:00
1 14:00:07.294234 14:00:07.394234 00:00:00.100000
2 15:00:07.294234 15:00:07.494234 00:00:00.200000
3 16:00:07.294234 16:00:07.694234 00:00:00.400000
</code></pre>
<p>现在我们有了<code>timedelta</code>,我们可以简单地将它除以一微秒,得到微秒数。</p>
<pre><code>df['microsecond_delta'] = df.delta / pd.np.timedelta64(1, 'us')
time1 time2 delta microsecond_delta
0 13:00:07.294234 13:00:07.294234 00:00:00 0
1 14:00:07.294234 14:00:07.394234 00:00:00.100000 100000
2 15:00:07.294234 15:00:07.494234 00:00:00.200000 200000
3 16:00:07.294234 16:00:07.694234 00:00:00.400000 400000
</code></pre>
<p>我不得不补充,这是非常反直觉的,但似乎这是唯一的办法。似乎没有办法直接访问毫秒。我尝试通过应用lambda函数,比如:</p>
<pre><code>df.delta.apply(lambda x: x.microseconds)
AttributeError: 'numpy.timedelta64' object has no attribute 'microseconds'
</code></pre>
<p>对于<code>seconds</code>、<code>nanoseconds</code>、<code>milliseconds</code>等等,情况也是如此。。。</p>