Как преобразовать столбец 'ndarray' dtype из ' - PullRequest
0 голосов
/ 10 октября 2019

Я перепробовал много вещей и не могу заставить это работать. По сути, я хочу сделать это, потому что возникает ошибка, когда я пытаюсь преобразовать этот ndarray в DataFrame. Следующая ошибка возникает при поиске пропущенных значений Datetime64 в кадре данных:

"Штамп времени наносекундной границы: 1-01-01 00:00:00"

Поэтому я хочу преобразовать эти DateTime64столбцы в Strings и перекодировать '1-01-01 00:00:00' в ndarray, затем преобразовать их обратно в переменные DateTime в DataFrame, чтобы избежать появления ошибки, показанной выше.

with sRW.SavReaderNp('C:/Users/Sam/Downloads/data.sav') as reader:
record = reader.all()

отпечатков:

[(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000',
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000',
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '0001-01-01T00:00:00.000000',)]

1 Ответ

0 голосов
/ 10 октября 2019

Прежде всего, пожалуйста, проверьте, является ли ваш пост действительным, т.е. содержит ли он исполняемый код. Ваш пример возвращает синтаксическую ошибку, а код, в котором вы пробовали то, что вы объяснили, просто отсутствует.


Тем не менее, я предполагаю, что ваши данные выглядят как

arr = [(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000'),
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '2019-08-05T00:00:00.000000'),
(b'61D8894E-7FB0-3DE6-E053-6C04A8C01207', 250000., '0001-01-01T00:00:00.000000')]

, который выглядит преобразованным вфрейм данных, такой как

df = pd.DataFrame(arr, columns=['ID', 'value', 'date'])

#                                         ID  ...                        date
# 0  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  2019-08-05T00:00:00.000000
# 1  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  2019-08-05T00:00:00.000000
# 2  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  ...  0001-01-01T00:00:00.000000

Тогда ваша попытка преобразовать строки даты в объекты datetime, вероятно, была

df.date = pd.to_datetime(df.date)

# OutOfBoundsDatetime: Out of bounds nanosecond timestamp: 1-01-01 00:00:00

, что приводит к сообщению об ошибке, которое вы отправили в своем вопросе.

Вы можете отловить эти ошибки синтаксического анализа с помощью errors kwarg pd.to_datetime:

df.date = pd.to_datetime(df.date, 'coerce')

#                                         ID     value       date
# 0  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0 2019-08-05
# 1  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0 2019-08-05
# 2  b'61D8894E-7FB0-3DE6-E053-6C04A8C01207'  250000.0        NaT
...