У меня есть фрейм данных Pandas, который выглядит так:
import pandas as pd
df = pd.DataFrame({'datetime':[
'Jan 20, 2000 12:00:00',
'Jan 20, 2000 12:00:00.5',
'Jan 20, 2000 12:00:01'
]})
df
datetime
0 Jan 20, 2000 12:00:00
1 Jan 20, 2000 12:00:00.5
2 Jan 20, 2000 12:00:01
Я хочу преобразовать столбец в формат даты и времени. Я пытался:
pd.to_datetime(df['datetime'], format='%b %d %Y %H:%M:%S')
... но дробная секунда .5
в строке 1 приводит к сбою преобразования.
Затем я попробовал:
pd.to_datetime(df['datetime'], format='%b %d %Y %H:%M:%S.%f')
... но это приводит к сбою строк 0 и 2 из-за отсутствия доли секунды.
Как я могу преобразовать столбец данных Pandas в формат даты и времени, если некоторые записи содержат дробные секунды, а некоторые нет?
Этот код эффективно преобразует столбец datetime в формат datetime, обрабатывая при этом смешанное присутствие дробных секунд.
import pandas as pd
# Sample DataFrame
df = pd.DataFrame({'datetime':['Jan 20, 2000 12:00:00', 'Jan 20, 2000 12:00:00.5', 'Jan 20, 2000 12:00:01']})
# Use errors='coerce' to handle missing fractional seconds
df['datetime'] = pd.to_datetime(df['datetime'], errors='coerce')
# Handle NaN values (missing fractional seconds) by filling with zeros
df['datetime'] = df['datetime'].fillna(pd.to_datetime(df['datetime'].dt.strftime('%Y-%m-%d %H:%M:%S') + '.000000'))
print(df)
Вы можете использовать format='mixed', чтобы определить формат каждого элемента.
df['datetime'] = pd.to_datetime(df['datetime'], format='mixed')
Примечание. 'mixed'
может быть рискованным, поскольку может непредсказуемо определить дату и время. Лучшей практикой может быть явная нормализация форматов строк даты и времени перед преобразованием:
df.loc[~df['datetime'].str.match('.*\.\d+$'), 'datetime'] += '.0'
Использование
coerce
возвращает вторую строку как NaT.