如何用Python批量处理Excel列中所有单元格的日期格式转换?
批量转换RETA列的多种日期格式为标准datetime类型
针对RETA列存在的空值、Excel数值日期、多种字符串格式日期、无效格式等情况,我们可以写一个通用转换函数,结合pandas批量处理整列数据,同时兼容各种异常场景。
实现步骤与代码
首先确保安装了所需依赖:
pip install pandas xlrd openpyxl
完整处理代码:
from datetime import datetime import xlrd import pandas as pd from pandas import NaT def convert_reta_date(cell_value): # 处理空单元格或空白字符串 if pd.isna(cell_value) or str(cell_value).strip() == "": return NaT # 处理Excel数值型日期(如44774.45833) if isinstance(cell_value, (int, float)): try: return datetime(*xlrd.xldate_as_tuple(cell_value, 0)) except Exception: return "无效日期" # 处理字符串格式的日期,尝试多种常见格式 cell_str = str(cell_value).strip() date_formats = [ "%Y-%m-%d %H:%M:%S", # 标准格式:2022-09-22 15:33:00 "%m/%d/%Y %I:%M:%S %p", # 带AM/PM的格式:1/8/2022 10:00:00 AM "%Y-%m-%d", # 仅日期的情况 "%m/%d/%Y" # 短日期格式 ] for fmt in date_formats: try: return datetime.strptime(cell_str, fmt) except ValueError: continue # 所有格式匹配失败,标记为无效 return "无效日期" # 读取你的Excel文件,xls格式用engine="xlrd",xlsx用"openpyxl" df = pd.read_excel("你的文件路径.xlsx", engine="openpyxl") # 批量转换RETA列,新增列保存结果(保留原数据方便核对) df["RETA_转换后"] = df["RETA"].apply(convert_reta_date) # 打印转换结果预览 print(df[["RETA", "RETA_转换后"]]) # 保存转换后的文件 df.to_excel("转换完成的文件.xlsx", index=False)
代码说明
- 空值处理:识别空单元格或空白字符串,返回pandas的
NaT(缺失时间值),方便后续数据清洗。 - Excel数值日期转换:利用
xlrd.xldate_as_tuple把Excel的日期数值转成datetime,兼容你的原有单条处理逻辑。 - 多格式字符串解析:预定义常见的日期格式,依次尝试解析,覆盖示例中的标准时间、带AM/PM的时间等场景。
- 无效数据标记:无法解析的内容(如
2022-09-2022 18:03:00)会标记为"无效日期",也可以改为返回NaT统一类型。
适配调整
- 如果你的日期格式是日/月/年(如8/1/2022表示2022年8月1日),需要在
date_formats中添加"%d/%m/%Y %I:%M:%S %p"格式。 - 旧版xls文件,将
pd.read_excel的engine参数改为"xlrd"。 - 若不需要保留原RETA列,可以直接覆盖:
df["RETA"] = df["RETA"].apply(convert_reta_date)。
内容的提问来源于stack exchange,提问作者Devaraj Mani Maran
相关产品推荐
相关产品推荐

