0

这是我在这里的第一篇文章,因此也感谢有关如何更好地传达我的问题的反馈。

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

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

我几乎可以使用 dateparser 来解决这个问题,但由于某种原因,它会破坏德语日期,其他文件的处理没有问题。01.08.2021(应为 8 月 1 日,变为 1 月 8 日)

样品日期(结构中均为 DD/MM/YYYY HH/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”对我没有任何作用。

4

1 回答 1

0

开箱即用,dateparser 假定 MDY 顺序;来自文档


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)

如果您在第二步而不是 during 中解析日期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

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

于 2022-01-27T15:45:12.137 回答