Строка даты и времени с пробелами, локальная дата - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь преобразовать строку даты и времени (на немецком языке) из MS Project Excel Export.

02 февраля 2022 г. 17:00

Я прочитал его из Excel-Export MS Project в pandas dataframe.

При преобразовании с

to_datetime(df["Anfang"], format= '%d %B %Y %H:%M').dt.date

но получите ошибку

ValueError: time data '07 Januar 2019 07:00' does not match format '%d %B %Y %H:%M' (match)

из https://docs.python.org/2/library/datetime.html#strftime-and-strptime-behavior

%B   Month as locale’s full name.   September

Что я здесь не так делаю? Нужно ли проверять некоторые локальные настройки? Я пользуюсь немецким (швейцарским)

import locale
locale.getdefaultlocale()
('de_CH', 'cp1252')

df in:

0       10 April 2019 08:00
1      07 Januar 2019 07:00
2      07 Januar 2019 07:00
3      07 Januar 2019 07:00
4     09 Oktober 2019 17:00
5    04 Dezember 2020 17:00
Name: Anfang, dtype: object

df out (хотел):

0       10-04-2019
1       07-01-2019
.
.

EDIT: Я изменил свою локаль на ('de_DE', 'cp1252'), но я получаю ту же ошибку.

РЕШИТЬ: Используя ответ matJ, я получил сообщение об ошибке «Die 15.06.21», который не соответствовал формату, что привело меня к исследованию данных. Там я нашел два разных формата даты (спасибо, Microsoft!). После очистки приведенный выше код работал хорошо !!! Таким образом, сообщение об ошибке to_datetime не было точным как datetime.strptime.

Спасибо за помощь.

Johannes

Ответы [ 2 ]

2 голосов
/ 13 июня 2019

Одним из возможных решений является использование dateparser модуля:

import dateparser

df['Anfang'] = df['Anfang'].apply(dateparser.parse)
print (df)
               Anfang
0 2019-04-10 08:00:00
1 2019-01-07 07:00:00
2 2019-01-07 07:00:00
3 2019-01-07 07:00:00
4 2019-10-09 17:00:00
5 2020-12-04 17:00:00

import dateparser

df['Anfang'] = df['Anfang'].apply(dateparser.parse).dt.date
print (df)
       Anfang
0  2019-04-10
1  2019-01-07
2  2019-01-07
3  2019-01-07
4  2019-10-09
5  2020-12-04
0 голосов
/ 13 июня 2019

Я бы поменял локаль по-другому.Тогда ваш код должен работать.

Следующее работает для меня:

import locale
from datetime import datetime 

locale.setlocale(locale.LC_ALL, 'de_DE')  # changing locale to german 
datetime.strptime('07 Januar 2019 07:00', '%d %B %Y %H:%M')  # returns a datetime obj which you can format as you like 

Дайте мне знать, если это работает и для вас.

...