Преобразовать столбец отметки времени SQL в столбец формата даты в кадре данных Python - PullRequest
0 голосов
/ 20 ноября 2018

У меня есть загрузка данных в формате MS Excel. введите описание изображения здесь

В этом файле есть столбец с датами в формате " дд.мм.гггг 00: 00: 00 ".Чтение файла с кодом:

df = pd.read_excel('data_from_db.xlsx')

Я получаю фрейм, где столбец дат имеет тип " object ".Далее я преобразую этот столбец в формат даты по команде:

df['Date_Column'] = pd.to_datetime(df['Date_Column'])

Это дает мне тип " datetime64 [ns] ".

Но эта команда не работает правильнокаждый раз.Встречаются строки с запутанными данными:

  1. где-то строки имеют формат "гггг. мм.дд ",
  2. где-то "гггг. дд.мм ".

Как правильно преобразовать столбец Excel с форматом" dd.mm.yyyy 00: 00: 00"в столбец в фрейме данных pandas с типом даты и" dd.mm.yyyy " fromat?

PS Кроме того, я заметил эту странность: некоторые значения в столбце необработанной даты имеют тип str, другие - float.Но я не могу обдумать это, потому что необработанная таблица - это загрузка из базы данных.

1 Ответ

0 голосов
/ 22 ноября 2018

Без указания формата, pd.to_datetime должен угадать из данных, как должна интерпретироваться строка даты.С параметрами по умолчанию это не работает для второй и третьей строки ваших данных:

In [5]: date_of_hire = pd.Series(['18.01.2018 0:00:00',
                                  '01.02.2018 0:00:00',
                                  '06.11.2018 0:00:00'])                    

In [6]: pd.to_datetime(date_of_hire)
Out[6]: 
0   2018-01-18
1   2018-01-02
2   2018-06-11
dtype: datetime64[ns]

Самое быстрое решение было бы передать dayfirst=True:

In [7]: pd.to_datetime(date_of_hire, dayfirst=True)
Out[7]: 
0   2018-01-18
1   2018-02-01
2   2018-11-06
dtype: datetime64[ns]

Если вы знаете полный форматиз ваших данных, можете указать это напрямую.Это работает только в том случае, если формат точно , как указано, если в строке, например, не хватает времени, преобразование не удастся.

In [8]: pd.to_datetime(date_of_hire, format='%d.%m.%Y %H:%M:%S')
Out[8]: 
0   2018-01-18
1   2018-02-01
2   2018-11-06
dtype: datetime64[ns]

В случае, если у вас мало информации о формате датыза исключением того, что он является непротиворечивым, pandas может заранее выводить формат из данных:

In [9]: pd.to_datetime(date_of_hire, infer_datetime_format=True)
Out[9]: 
0   2018-01-18
1   2018-02-01
2   2018-11-06
dtype: datetime64[ns]
...