Функция Pandas to_datetime, приводящая к метке времени Unix вместо Datetime для определенных строк даты - PullRequest
0 голосов
/ 10 октября 2019

Я сталкиваюсь с проблемой, когда функция Pandas to_datetime приводит к метке времени Unix вместо объекта datetime для определенных строк. Формат даты в строках, которые конвертируются в datetime, и строки, конвертируемые в метку времени Unix как int, выглядят идентичными. Когда возникает проблема, кажется, влияет на все даты в строке.

Например:

2019-01-02T10:12:28.64Z (сохраняется как str) заканчивается как 1546424003423000000

Пока

2019-09-17T11:28:49.35Z (сохраняется как str) преобразуется в объект datetime.

Другая дата в той же строке - 2019-01-02T10:13:23.423Z (хранится как str), которая также преобразуется в метку времени.

Не так много кода, чтобы посмотреть, преобразование происходит в одной строке:

full_df.loc[mask, 'transaction_changed_datetime'] = pd.to_datetime(full_df['SaleItemChangedOn']) и

full_df.loc[pd.isnull(full_df['completed_date']), 'completed_date'] = pd.to_datetime(full_df['SaleCompletedOn']

IЯ тоже пробовал с errors='coerce', но результат тот же. Я могу разобраться с этой проблемой позже в коде, но мне бы очень хотелось понять, почему это происходит.

Редактировать

По запросу, это MRE для воспроизведения проблемы на моем компьютере. Некоторые примечания по этому поводу:

  1. Маска как-то задействована. Если я удаляю маску, она преобразуется нормально.
  2. Если я передаю только первую строку в Dataframe (однострочный Dataframe), она преобразуется нормально.
import pandas as pd
from pandas import NaT, Timestamp

debug_dict = {'SaleItemChangedOn': ['2019-01-02T10:12:28.64Z', '2019-01-02T10:12:28.627Z'],
              'transaction_changed_datetime': [NaT, Timestamp('2019-01-02 11:58:47.900000+0000', tz='UTC')]}
df = pd.DataFrame(debug_dict)
mask = (pd.isnull(df['transaction_changed_datetime']))
df.loc[mask, 'transaction_changed_datetime'] = pd.to_datetime(df['SaleItemChangedOn'])```

1 Ответ

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

Когда я пробую упомянутые вами примеры:

import numpy as np
import pandas as pd
df = pd.DataFrame({'a':['2019-01-02T10:12:28.64Z', '2019-09-17T11:28:49.35Z', np.nan]})
pd.to_datetime(df['a'])

Кажется, что нет никаких проблем:

Out[74]: 
0   2019-01-02 10:12:28.640000+00:00
1   2019-09-17 11:28:49.350000+00:00
2                                NaT
Name: a, dtype: datetime64[ns, UTC]

Не могли бы вы предоставить MRE

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