@Fee1in

Как привести колонку с датами к типу 'datetime64[ns]'?

Не понимаю почему не получается у pandas привести дату '8 05 2020 11:23' к виду 2020-05-08 11:23:00
import pandas as pd
df=pd.DataFrame(data=[['ab','8 05 2020 11:23'],['sa','2020-05-12 10:30:00'],['opk',None],
['rt','2020-04-30 13:22:00'],['eun',None],['ert','2020-04-17 11:39:00']],columns=['Words','Дата'])

df.Дата=pd.to_datetime(df.Дата, errors='ignore', format='%d %m %Y %H:%M')
#не дает должного результата не может "привести" дату к должному виду

Что не так? Нужно все даты "привести" к единому форматированию и отсортировать, есть которые пустые даты пусть остаются.
  • Вопрос задан
  • 1702 просмотра
Решения вопроса 1
@zexer
Лихо вы поставили ошибку в игнор, а зря, потому что в ошибке кроется всегда ответ.
ValueError: time data '2020-05-12 10:30:00' does not match format '%d %m %Y %H:%M' (match)
Данный формат не соответствует тому формату, который вы задали (черточки вместо пробелов).
Не совсем понятно, почему вы решили, будто пандас может привести кучу разрозненных форматов к одному, нет, пандас так не может. Пандас переводит один заданный формат в другой, не иначе.
Вам следует написать функцию, которая будет обрабатывать столбец с датой и применять к одному формату даты один обработчик, а к другому формату другой обработчик.
Для вашего примера я написал это:
import pandas as pd
df = pd.DataFrame(data=[['ab', '8 05 2020 11:23'],
                                       ['sa', '2020-05-12 10:30:00'],
                                       ['opk', None],
                                       ['rt', '2020-04-30 13:22:00'],
                                       ['eun', None],
                                       ['ert', '2020-04-17 11:39:00']], columns=['Words','Дата'])
def convert_to_datetime(series):
    result = pd.Series(index=series.index)
    idx1 = ['-' in i if i is not None else True  for i in series] # Ищет формат даты через "-" и None
    idx2 = [not i for i in idx1] # Делает замену True на False и False на True
    result[idx1] = pd.to_datetime(series[idx1], format='%Y-%m-%d %H:%M')
    result[idx2] = pd.to_datetime(series[idx2], format='%d %m %Y %H:%M')
    
    return result

df['Дата'] = convert_to_datetime(df['Дата'])
df

Если добавится третий формат (или даже несколько), то придется переписывать код, но суть думаю вы поняли.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы