日期时间字符串,带空格,本地日期

时间:2019-06-13 06:22:04

标签: python pandas string-to-datetime

我正在尝试转换来自MS Project Excel Export的日期时间字符串(德语)。

02年2月2日17:00

我从MS Project的Excel导出中将其读取到熊猫数据框中。

使用

进行转换时
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输出(需要):

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

编辑: 我将语言环境更改为('de_DE','cp1252'),但出现相同的错误。

已解决: 通过使用matJ的答案,我得到了“ Die 15.06.21”与格式不匹配的错误,这使我不得不调查数据。在那里,我发现了两种不同的日期格式(谢谢,微软!)。清洗后,以上代码运行良好!!! 因此,to_datetime的错误消息并不像datetime.strptime那样精确。

感谢您的帮助。

约翰内斯

2 个答案:

答案 0 :(得分:2)

一种可能的解决方案是使用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

答案 1 :(得分:0)

我将以其他方式更改语言环境。然后您的代码应该可以工作。

以下对我有用:

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 

让我知道这是否对您也有用。