带空格的日期时间字符串,本地日期
Datetime string with whitespace, local date
我正在尝试转换来自 MS Project Excel 导出的日期时间字符串(德语)。
2022 年 2 月 2 日 17:00
我从 Excel 中读取它-将 MS 项目导出到 pandas 数据框。
用
转换时
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 在:
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
.
那样准确
感谢您的帮助。
约翰内斯
一种可能的解决方案是使用 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
我会以不同的方式更改语言环境。那么您的代码应该可以工作。
以下对我有用:
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
让我知道这是否也适合你。
我正在尝试转换来自 MS Project Excel 导出的日期时间字符串(德语)。
2022 年 2 月 2 日 17:00
我从 Excel 中读取它-将 MS 项目导出到 pandas 数据框。
用
转换时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 在:
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
.
感谢您的帮助。
约翰内斯
一种可能的解决方案是使用 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
我会以不同的方式更改语言环境。那么您的代码应该可以工作。
以下对我有用:
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
让我知道这是否也适合你。