У меня есть массив numpy, который состоит из значений numpy.datetime64. Я хотел бы преобразовать их в pandas Timestamps с помощью pandas.Timestamp().Применение вызова pandas Timestamp() для каждого элемента массива numpy
я мог бы сделать явным для цикла как
import numpy as np
import pandas as pd
stamps = [pd.Timestamp(t) for t in my_arr]
, но это не очень эффективно. Я могу использовать функцию векторизации Numpy, чтобы сделать что-то вроде этого вместо
stamper = np.vectorize(pd.Timestamp)
stamps = stamper(my_arr)
но документация NumPy утверждает, что векторизовать в основном функция удобства и не предназначены для повышения производительности. Есть ли лучший, более эффективный способ сделать это?
Edit: Вот некоторые тайминги от некоторых решений, приведенных:
%timeit stamper(my_arr)
%timeit my_arr.astype(pd.Timestamp)
%timeit np.array([pd.Timestamp(t) for t in my_arr])
%timeit pd.to_datetime(my_arr)
100 loops, best of 3: 7.04 ms per loop
10000 loops, best of 3: 82 µs per loop
100 loops, best of 3: 16.8 ms per loop
1000 loops, best of 3: 1.19 ms per loop
Кажется, что .astype() является самым быстрым, так что я пойду с этим. Благодаря!
Не будет 'pd.DataFrame (my_arr) .to_timest amp() 'делать то, что вы хотите? – EdChum
Эд, похоже, это не так. Когда я попробовал это, у меня получилось, что объект «Int64Index» не имеет атрибута «to_timestamp» « – gammapoint
Извините, попробуйте' pd.DataFrame (my_arr) .to_timestamp (axis = 1) ' – EdChum