Python / Pandas - 使用 dateparser 不同区域设置解析日期时间格式

Python / Pandas - Parsing Date-Time-Formats using dateparser different Locales

这是我第一次 post 来这里,因此也欢迎提供有关如何更好地表达我的问题的反馈。

基本上我想在 .csv 文件的文件夹上应用日期解析器。问题是:文件可以包含不同的数据时间格式(语言环境)。

我选择了 dateparser,因为它可以“开箱即用”地处理不同的语言环境。 文件中的语言环境是:德语、英语、法语、意大利语、西班牙语、瑞典语、波兰语和荷兰语。 单个文件只有一种不同的日期格式。文件一是德文,文件二是英文等等。

我几乎可以使用 dateparser 使它正常工作,但由于某种原因它破坏了德国日期,其他文件的处理没有问题。 01.08.2021(应该是 8 月 1 日,变成 1 月 8 日)

Sample-Dates(结构上都是DD/MM/YYYYHH/MM/SS)

uk = "31 Jul 2021 23:07:35"
fr = "31 juil. 2021 22:36:38"
it = "31 lug 2021 22:14:56"
es = "31 jul. 2021 22:08:08"
de = "01.08.2021 22:15:54"
se = "2 jan. 2022 07:12:44"
nl = "31 jul. 2021 22:04:02"
pl = "2 lis 2021 08:27:54"

我的代码:

import os, dateparser, pandas as pd

dateien = []

marketplaces = []

quelle = "CSVs/header_inject/"

counter = 0

for subdir, dirs, files in os.walk(quelle):
    for file in files:
        dateien.append(file)

for input_file in dateien:
    df = pd.read_csv(quelle+input_file, header=0, parse_dates=['Datum'], date_parser=dateparser.parse, index_col=False ,dtype=str, low_memory=False,sep=",")
    counter +=1
    df.to_csv("CSVs/Transactions_format/"+str(counter)+".csv", index=False)

加载文件时添加“dayfirst=True”对我没有任何帮助。

开箱即用,dateparser 采用 MDY 顺序;来自 docs:


OOTB 基于语言的日期顺序偏好

>>> # parsing ambiguous date
>>> parse('02-03-2016')  # assumes english language, uses MDY date order
datetime.datetime(2016, 2, 3, 0, 0)
>>> parse('le 02-03-2016')  # detects french, uses DMY date order
datetime.datetime(2016, 3, 2, 0, 0)

如果您在第二步而不是 read_csv 期间解析日期,您可以为 dateparser 提供设置,例如:

import dateparser   
import pandas as pd

df = pd.DataFrame({'dates': (uk,fr,it,es,de,se,nl,pl)})

df['datesparsed'] = df['dates'].apply(dateparser.parse, settings={'DATE_ORDER': 'DMY'})

# df
#                     dates         datesparsed
# 0    31 Jul 2021 23:07:35 2021-07-31 23:07:35
# 1  31 juil. 2021 22:36:38 2021-07-31 22:36:38
# 2    31 lug 2021 22:14:56 2021-07-31 22:14:56
# 3   31 jul. 2021 22:08:08 2021-07-31 22:08:08
# 4     01.08.2021 22:15:54 2021-08-01 22:15:54
# 5    2 jan. 2022 07:12:44 2022-01-02 07:12:44
# 6   31 jul. 2021 22:04:02 2021-07-31 22:04:02
# 7     2 lis 2021 08:27:54 2021-11-02 08:27:54

( ! ) 但是请注意,现在 all 不明确的日期将被解释为 DMY。