2024-09-30 00:24:35 发布
网友
我有一个python pandas数据框,它包含两列:time1和time2:
time1
time2
time1 time2 13:00:07.294234 13:00:07.294234 14:00:07.294234 14:00:07.394234 15:00:07.294234 15:00:07.494234 16:00:07.294234 16:00:07.694234
如果可能的话,如何生成包含time1和time2之间微秒差的第三列?
最简单的方法就是这样做:
(pd.to_datetime(df['time2']) - pd.to_datetime(df['time1'])) / np.timedelta64(1, 'us')
如果在hese前面加上实际日期,则可以将它们转换为datetime64列:
In [11]: '2014-03-19 ' + df Out[11]: time1 time2 0 2014-03-19 13:00:07.294234 2014-03-19 13:00:07.294234 1 2014-03-19 14:00:07.294234 2014-03-19 14:00:07.394234 2 2014-03-19 15:00:07.294234 2014-03-19 15:00:07.494234 3 2014-03-19 16:00:07.294234 2014-03-19 16:00:07.694234 [4 rows x 2 columns] In [12]: df = ('2014-03-19 ' + df).astype('datetime64[ns]') Out[12]: time1 time2 0 2014-03-19 20:00:07.294234 2014-03-19 20:00:07.294234 1 2014-03-19 21:00:07.294234 2014-03-19 21:00:07.394234 2 2014-03-19 22:00:07.294234 2014-03-19 22:00:07.494234 3 2014-03-19 23:00:07.294234 2014-03-19 23:00:07.694234
现在可以减去这些列:
In [13]: delta = df['time2'] - df['time1'] In [14]: delta Out[14]: 0 00:00:00 1 00:00:00.100000 2 00:00:00.200000 3 00:00:00.400000 dtype: timedelta64[ns]
要获得微秒数,只需将基础纳秒除以1000:
In [15]: t.astype(np.int64) / 10**3 Out[15]: 0 0 1 100000 2 200000 3 400000 dtype: int64
正如Jeff指出的,在最新版本的numpy上,你可以除以1微秒:
In [16]: t / np.timedelta64(1,'us') Out[16]: 0 0 1 100000 2 200000 3 400000 dtype: float64
一开始我以为这里没有正确的答案,因为没有绿色的滴答声。但正如杰夫在评论中指出的,我错了。
不管怎样,这都是我的贡献。
首先,显而易见的是,将datetime.time变成timedelta
datetime.time
timedelta
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
现在我们有了timedelta,我们可以简单地将它除以一微秒,得到微秒数。
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
我不得不补充,这是非常反直觉的,但似乎这是唯一的办法。似乎没有办法直接访问毫秒。我尝试通过应用lambda函数,比如:
df.delta.apply(lambda x: x.microseconds) AttributeError: 'numpy.timedelta64' object has no attribute 'microseconds'
对于seconds、nanoseconds、milliseconds等等,情况也是如此。。。
seconds
nanoseconds
milliseconds
最简单的方法就是这样做:
(pd.to_datetime(df['time2']) - pd.to_datetime(df['time1'])) / np.timedelta64(1, 'us')
如果在hese前面加上实际日期,则可以将它们转换为datetime64列:
现在可以减去这些列:
要获得微秒数,只需将基础纳秒除以1000:
正如Jeff指出的,在最新版本的numpy上,你可以除以1微秒:
一开始我以为这里没有正确的答案,因为没有绿色的滴答声。但正如杰夫在评论中指出的,我错了。
不管怎样,这都是我的贡献。
首先,显而易见的是,将
datetime.time
变成timedelta
现在我们有了
timedelta
,我们可以简单地将它除以一微秒,得到微秒数。我不得不补充,这是非常反直觉的,但似乎这是唯一的办法。似乎没有办法直接访问毫秒。我尝试通过应用lambda函数,比如:
对于
seconds
、nanoseconds
、milliseconds
等等,情况也是如此。。。相关问题 更多 >
编程相关推荐