@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')
#не дает должного результата не может "привести" дату к должному виду

Что не так? Нужно все даты "привести" к единому форматированию и отсортировать, есть которые пустые даты пусть остаются.
  • Вопрос задан
  • 1711 просмотров
Решения вопроса 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

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

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

Похожие вопросы