将对象存储为while循环之前的datetime

2024-09-28 01:29:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用while循环来获取数据帧中当前行和前一行之间的时间差。为了提供一些上下文,下面是我的示例代码:

counter = len(data)-1
last = pd.to_datetime(data['time'], infer_datetime_format=True)
current = last
while((last-current).seconds() <= 60 and counter>-1):
                # Do something
       data[counter]

但是,我收到了以下错误消息:

AttributeError: 'Series' object has no attribute 'seconds'

据我所知,datetime函数不适用于pandas系列,因此至少有两种方法可以解决这个问题:

1)将last存储为datetime对象以利用.seconds()datetime函数

2)使用熊猫版本的(last-current).seconds()datetime函数

非常感谢您的帮助!你知道吗

附加数据结构示例

{'time': {0: Timestamp('2016-03-28 23:23:12'), 1: Timestamp('2016-03-28 23:23:32'), 2: Timestamp('2016-03-28 23:23:52'), 3: Timestamp('2016-03-28 23:24:12'), 4: Timestamp('2016-03-28 23:22:12'), 5: Timestamp('2016-03-28 23:24:32'), 6: Timestamp('2016-03-28 23:24:52'), 7: Timestamp('2016-03-28 23:25:32'), 8: Timestamp('2016-03-28 23:30:12'), 9: Timestamp('2016-03-28 23:29:12')}, 'Origin': {0: 'Boston', 1: 'New York', 2: 'Boston', 3: 'New York', 4: 'Hawaii', 5: 'Hawaii', 6: 'Miami', 7: 'Las Vegas', 8: 'Hawaii', 9: 'New York'}, 'Destination': {0: 'Miami', 1: 'Miami', 2: 'Miami', 3: 'Boston', 4: 'Boston', 5: 'New York', 6: 'Las Vegas', 7: 'Las Vegas', 8: 'Las Vegas', 9: 'Los Angeles'}}


Tags: 函数newdatadatetimecountercurrentbostontimestamp
1条回答
网友
1楼 · 发布于 2024-09-28 01:29:05

我相信这就是你需要的:

data['time'].diff()

输出如下:

0                 NaT
1            00:00:20
2            00:00:20
3            00:00:20
4   -1 days +23:58:00
5            00:02:20
6            00:00:20
7            00:00:40
8            00:04:40
9   -1 days +23:59:00
Name: time, dtype: timedelta64[ns]

根据评论编辑

有几种方法可以获得总秒数。你知道吗

In [12]: data['time'].diff() / np.timedelta64(1, 's')
Out[12]: 
0    NaN
1     20
2     20
3     20
4   -120
5    140
6     20
7     40
8    280
9    -60
Name: time, dtype: float64

In [13]: timeit data['time'].diff() / np.timedelta64(1, 's')
1000 loops, best of 3: 738 µs per loop

In [14]: data['time'].diff().map(lambda td: td.item(), na_action='ignore')*1e-9
Out[14]: 
0    NaN
1     20
2     20
3     20
4   -120
5    140
6     20
7     40
8    280
9    -60
Name: time, dtype: object


In [15]: timeit data['time'].diff().map(lambda td: td.item(), na_action='ignore')*1e-9
1000 loops, best of 3: 381 µs per loop

或者更好的是:

In [17]: np.divide(data['time'].diff() , np.timedelta64(1, 's'))
Out[17]: 
0    NaN
1     20
2     20
3     20
4   -120
5    140
6     20
7     40
8    280
9    -60
Name: time, dtype: float64

timeit np.divide(data['time'].diff() , np.timedelta64(1, 's'))
The slowest run took 4.27 times longer than the fastest. This could mean that an intermediate result is being cached 
10000 loops, best of 3: 155 µs per loop

相关问题 更多 >

    热门问题