Я сталкиваюсь с проблемой, когда функция 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 для воспроизведения проблемы на моем компьютере. Некоторые примечания по этому поводу:
- Маска как-то задействована. Если я удаляю маску, она преобразуется нормально.
- Если я передаю только первую строку в 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'])```