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。
这是我第一次 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。