如何用pandas批量导入Excel、转换日期格式并提取各文件最新日期
修复方案
现有代码的核心问题
- 存在变量拼写错误:日期列赋值时写的
df_File1d多了末尾字符d,会直接触发名称错误 - 日期解析逻辑写死了单种格式:既无法兼容带秒/不带秒的两种时间写法,也没处理第二种日期里年和时间之间的多余连续空格,必然解析失败
- 逐文件硬编码读取逻辑太冗余:6个文件如果逐行写read_excel,后续改路径、加文件维护成本很高,不适合定期更新的场景
修复后完整代码
import pandas as pd import re from datetime import datetime # 统一在这里配置所有要读取的文件,格式为(显示名称, 文件路径),新增文件直接往列表里加即可 file_config = [ ("File 1", r"File1Location.xlsx"), ("File 2", r"File2Location.xlsx"), ("File 3", r"File3Location.xlsx"), ("File 4", r"File4Location.xlsx"), ("File 5", r"File5Location.xlsx"), ("File 6", r"File6Location.xlsx"), ] def parse_date(date_str): # 预处理:转字符串、去掉首尾空格、把连续多个空格替换成单个空格 clean_str = re.sub(r'\s+', ' ', str(date_str).strip()) # 依次尝试两种格式解析,兼容带秒/不带秒的情况 for fmt in ('%d/%m/%Y %H:%M:%S', '%d/%m/%Y %H:%M'): try: return datetime.strptime(clean_str, fmt) except ValueError: pass # 两种格式都解析失败时抛出明确错误,方便排查异常值 raise ValueError(f"无法解析的日期格式: {date_str}") if __name__ == "__main__": # 提前在终端执行 pip install pandas openpyxl 安装依赖,不要在代码内调用pip.main for file_name, file_path in file_config: # 读取单个Excel文件 df = pd.read_excel(file_path, engine="openpyxl") # 解析日期列 df["parsed_date"] = df["Date Created"].apply(parse_date) # 取最新日期,按要求的dd/mm/YYYY格式格式化输出 latest_date = df["parsed_date"].max().strftime("%d/%m/%Y") print(f"-{file_name} : Latest Date: {latest_date}")
代码说明
- 所有文件路径统一在
file_config列表里维护,后续更新文件路径、新增/删除读取文件只需要改这个列表即可,不用重复写读取逻辑 - 日期解析前先做空格归一化处理,不管日期和时间之间有1个还是多个空格都能正常识别,自动适配你提到的两种日期格式,遇到解析不了的异常值会抛出明确提示方便排查
- 日期列转成datetime类型后直接用
max()就能拿到最新时间,最后输出时统一转成你需要的日/月/年格式,和你给出的输出示例完全匹配
内容的提问来源于stack exchange,提问作者brutusbombocloth
相关产品推荐
相关产品推荐

