Как преобразовать numpy массив из numpy.int64 в datetime? - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть следующий массив типа <class 'numpy.ndarray'>

array([20181010, 20181031, 20181116, 20181012, 20181005, 20181008,
       20181130, 20181011, 20181005, 20181116])

Как я могу преобразовать его составляющие из текущего типа <class 'numpy.int64'> в datetime в numpy?Я хочу найти быстрый способ, и я понимаю, что использование циклического или списочного понимания, а также преобразование этого numpy.array в pandas или в list будет медленнее.

Пожалуйста, исправьте меняесли я ошибаюсь.

PS На этот вопрос, возможно, где-то ответили, но я не смог найти ни одного решения, которое бы работало.

1 Ответ

0 голосов
/ 10 декабря 2018

pandas имеет лучшее представление о том, что можно считать датой:

import numpy as np
import pandas as pd
arr = np.array([20181010, 20181031, 20181116, 20181012, 20181005, 
                20181008, 20181130, 20181011, 20181005, 20181116])
pd.to_datetime(arr.astype(str)).values

Выполнение этого для набора из 10 000 000 записей:

%%prun import numpy as np; import pandas as pd
lst = [20181010, 20181031, 20181116, 20181012, 20181005, 
       20181008, 20181130, 20181011, 20181005, 20181116]*1000000
arr = np.array(lst)
arr_str = arr.astype(str)
pd.to_datetime(arr_str).values

создает prunиз

   ncalls  tottime  percall  cumtime  percall filename:lineno(function)
        1    8.977    8.977    8.977    8.977 {method 'astype' of 'numpy.ndarray' objects}
        1    4.394    4.394    4.394    4.394 {built-in method pandas._libs.tslib.array_to_datetime}
        2    2.344    1.172    2.344    1.172 {built-in method pandas._libs.algos.ensure_object}
        4    0.918    0.229    0.918    0.229 {built-in method numpy.core.multiarray.array}
        1    0.313    0.313    7.053    7.053 datetimes.py:106(to_datetime)
...

Это достаточно эффективно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...