Pandas解析PDF中德语日期格式问题求助
解决Pandas解析德语日期格式的问题
嘿,作为Pandas新手遇到这种本地化日期解析的问题太正常了!德语的月份名称和日期格式确实会让默认的pd.to_datetime摸不着头脑,我给你一套完整的解决方案,从PDF导入到最终导出CSV都搞定。
第一步:把PDF日程表转成DataFrame
首先得把PDF里的表格数据提取出来,推荐用tabula-py这个工具,专门处理PDF表格:
- 先安装:
pip install tabula-py - 读取PDF的代码示例:
import tabula # 读取PDF所有页面的表格,取第一个结果(如果只有一个表格的话) df = tabula.read_pdf("你的日程PDF文件.pdf", pages="all")[0]
如果读取的格式有点乱,可以试试加guess=False手动指定表格区域,或者stream=True适配流式PDF。
第二步:解析德语日期格式
你的日期格式是Do., 10. Mai 2018,其中Do.是德语周四(Donnerstag)的缩写,Mai是德语五月。这里有两种可靠的解析方法:
方法1:利用系统本地化设置
Pandas可以配合系统的locale识别德语月份,先设置德语locale(不同系统写法不同):
import pandas as pd import locale # 尝试设置德语locale(Linux/macOS适用) try: locale.setlocale(locale.LC_TIME, "de_DE.UTF-8") # Windows系统用这个 except: locale.setlocale(locale.LC_TIME, "German_Germany.1252") # 解析Start Date列,指定格式匹配规则 df["Start Date"] = pd.to_datetime( df["Start Date"], format="%a., %d. %B %Y", errors="coerce" # 解析失败的会标记为NaT,方便后续排查问题 )
格式字符串说明:
%a.:匹配缩写的星期名称(比如Do.)%d.:匹配带点的日期数字(比如10.)%B:匹配完整的德语月份名称(比如Mai)%Y:匹配4位年份
方法2:手动替换德语月份(规避locale问题)
如果你的系统没法设置德语locale(比如某些服务器环境),可以手动把德语月份替换成英文,再解析:
# 德语月份到英文的映射字典 german_to_english_months = { "Januar": "January", "Februar": "February", "März": "March", "April": "April", "Mai": "May", "Juni": "June", "Juli": "July", "August": "August", "September": "September", "Oktober": "October", "November": "November", "Dezember": "December" } # 替换Start Date里的德语月份 df["Start Date"] = df["Start Date"].replace(german_to_english_months, regex=True) # 用英文格式规则解析日期 df["Start Date"] = pd.to_datetime(df["Start Date"], format="%a., %d. %B %Y")
第三步:适配日历工具的CSV格式
像Google日历这类工具通常需要完整的开始/结束时间,所以把日期和时间合并成标准datetime列:
# 合并日期与时间,生成完整的时间戳 df["Start Datetime"] = pd.to_datetime(df["Start Date"].astype(str) + " " + df["Start Time"]) df["End Datetime"] = pd.to_datetime(df["Start Date"].astype(str) + " " + df["End Time"]) # 导出为适合日历导入的CSV,只保留必要列 df[["Start Datetime", "End Datetime", "Location", "Subject"]].to_csv("可导入日历的日程表.csv", index=False)
这样导出的CSV就能直接导入Google日历或者其他工具啦!
内容的提问来源于stack exchange,提问作者Arnau
相关产品推荐
相关产品推荐

