Как я могу преобразовать столбец данных Pandas в дату и время, если формат дробных секунд несовместим?

У меня есть фрейм данных 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 в формат даты и времени, если некоторые записи содержат дробные секунды, а некоторые нет?

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
78
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Этот код эффективно преобразует столбец 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)

Использование coerce возвращает вторую строку как NaT.

James 24.04.2024 15:31
Ответ принят как подходящий

Вы можете использовать format='mixed', чтобы определить формат каждого элемента.

df['datetime'] = pd.to_datetime(df['datetime'], format='mixed')

Примечание. 'mixed' может быть рискованным, поскольку может непредсказуемо определить дату и время. Лучшей практикой может быть явная нормализация форматов строк даты и времени перед преобразованием:

df.loc[~df['datetime'].str.match('.*\.\d+$'), 'datetime'] += '.0'

Другие вопросы по теме