python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Pandas统一杂乱日期格式为XX月XX日

Pandas批量统一杂乱日期格式为XX月XX日的实现方法

作者:梦因you而美

在日常Python数据分析、Excel数据处理场景中,经常会遇到表格日期格式杂乱不统一的问题,数据中同时存在时间戳日期、年.月.日字符串、月.日简写、空值等多种格式,本文将提供一套通用、健壮的解决方案:通过全字符串读取原始数据规避格式丢失问题,需要的朋友可以参考下

摘要

在日常Python数据分析、Excel数据处理场景中,经常会遇到表格日期格式杂乱不统一的问题,数据中同时存在时间戳日期、年.月.日字符串、月.日简写、空值等多种格式。Pandas默认读取会自动解析数据类型,极易出现5.10被误转为5.1、日期解析失败、数据丢失等问题。本文将提供一套通用、健壮的解决方案:通过全字符串读取原始数据规避格式丢失问题,编写万能日期转换函数,将所有杂乱日期统一格式化为XX月XX日中文格式,并支持一键导出Excel文件,完美适配各类不规则日期数据处理场景。

项目背景

在处理业务Excel数据时,日期列格式混乱是高频痛点,常见的不规则日期格式如下:

如果直接使用Pandas默认方式读取并转换日期,会出现两大致命问题:一是浮点型日期5.10丢失末尾0,变成5.1;二是多格式混杂导致解析报错、数据错乱,无法统一统计展示。因此需要一套兼容所有格式、零数据丢失、全自动转换的处理方案。

环境准备

本次项目仅需pandas库,若未安装可执行以下命令:

pip install pandas

原始数据准备

为方便大家测试使用,本文提供代码模拟数据(无需本地Excel)本地Excel原始文件数据两种方式,数据完全还原真实业务杂乱日期场景。

1.1 真实原始数据样例

原始Excel表格包含4列不规则日期数据,覆盖所有常见异常格式:

日期列1日期列2日期列3日期列4
2026-05-16 00:00:005.264.212026.5.18
2026-05-27 00:00:005.265.112026.5.18
2026-06-17 00:00:005.222026.5.18
2026-05-23 00:00:005.222026.5.18
2026-05-26 00:00:005.182026.5.18
5.22026.5.20
5.26

1.2 两种数据使用方式

1、本地文件模式:新建Excel文件,命名为你的原始文件.xlsx,将上述表格粘贴进去,用于读取本地真实数据;

2、代码模拟模式:无需创建任何文件,代码内置完整测试数据,可直接运行测试。

完整可运行代码(带详细注释)

核心优化:全字符串读取数据,彻底规避浮点数据精度丢失问题,兼容所有日期格式,容错性拉满。

方式一:模拟数据版(零基础一键运行)

import pandas as pd

# 定义通用日期格式化函数:兼容所有杂乱日期格式,统一转为XX月XX日
def format_to_mmdd(x):
    # 处理空值:NaN、空字符串、字符串nan统一返回空
    if pd.isna(x) or str(x).strip().lower() == "nan":
        return ""
    # 去除首尾空格,统一格式
    s = str(x).strip()

    try:
        # 优先解析标准日期格式(时间戳、年-月-日)
        dt = pd.to_datetime(s)
        # 格式化输出:X月X日
        return f"{dt.month}月{dt.day}日"
    except:
        # 解析失败后,手动处理.分割的自定义日期格式
        if "." in s:
            parts = s.split(".")
            try:
                # 处理 月.日 格式(例:5.26)
                if len(parts) == 2:
                    return f"{int(parts[0])}月{int(parts[1])}日"
                # 处理 年.月.日 格式(例:2026.5.18)
                if len(parts) == 3:
                    return f"{int(parts[1])}月{int(parts[2])}日"
            except:
                # 格式异常返回空
                return ""
    # 无法识别的格式统一返回空
    return ""

# 1. 内置模拟原始数据,强制全字符串格式,杜绝数据类型转换问题
df = pd.DataFrame({
    "日期列1": ["2026-05-16 00:00:00", "2026-05-27 00:00:00", "2026-06-17 00:00:00", 
               "2026-05-23 00:00:00", "2026-05-26 00:00:00", "", ""],
    "日期列2": ["5.26", "5.26", "5.22", "5.22", "5.18", "5.2", "5.26"],
    "日期列3": ["4.21", "5.11", "", "", "", "", ""],
    "日期列4": ["2026.5.18", "2026.5.18", "2026.5.18", "2026.5.18", 
               "2026.5.18", "2026.5.20", ""]
}, dtype=str)

# 2. 批量对所有单元格执行日期格式化
df_result = df.applymap(format_to_mmdd)

# 3. 导出处理后的数据到Excel,不保留索引
df_result.to_excel("日期格式化结果.xlsx", index=False)

# 打印结果查看
print("✅ 日期格式化完成,处理结果如下:")
print(df_result)
print("\n✅ 已成功导出文件:日期格式化结果.xlsx")

方式二:本地Excel文件读取版(真实业务数据使用)

import pandas as pd

# 统一日期格式化函数
def format_to_mmdd(x):
    if pd.isna(x) or str(x).strip().lower() == "nan":
        return ""
    s = str(x).strip()

    try:
        dt = pd.to_datetime(s)
        return f"{dt.month}月{dt.day}日"
    except:
        if "." in s:
            parts = s.split(".")
            try:
                if len(parts) == 2:
                    return f"{int(parts[0])}月{int(parts[1])}日"
                if len(parts) == 3:
                    return f"{int(parts[1])}月{int(parts[2])}日"
            except:
                return ""
    return ""

# 🔥 核心关键:dtype=str 强制所有列以字符串读取,零数据丢失
df = pd.read_excel("你的原始文件.xlsx", dtype=str)

# 批量格式化所有日期
df_result = df.applymap(format_to_mmdd)

# 导出结果
df_result.to_excel("日期格式化结果.xlsx", index=False)
print("✅ 本地文件处理完成,结果已导出!")

程序运行结果

所有杂乱日期全部统一为XX月XX日中文格式,空值保留空白,无数据丢失、无解析错误,最终效果如下:

日期列1日期列2日期列3日期列4
5月16日5月26日4月21日5月18日
5月27日5月26日5月11日5月18日
6月17日5月22日5月18日
5月23日5月22日5月18日
5月26日5月18日5月18日
5月2日5月20日
5月26日
运行代码后,项目目录会生成 日期格式化结果.xlsx 文件,可直接用于报表统计、数据展示。

高频踩坑点总结(核心重点)

坑点1:默认读取导致浮点日期精度丢失

Pandas默认会将5.10这类数据识别为浮点数,自动舍去末尾0,变成5.1,造成日期错误。

✅ 解决方案:读取Excel时强制 dtype=str,所有数据以原始字符串存储,完全保留原始信息。

坑点2:多格式混杂日期解析报错

数据同时存在时间戳、年.月.日、月.日多种格式,单一解析规则会直接报错、返回空值。

✅ 解决方案:先使用pd.to_datetime解析标准日期,异常捕获后手动解析自定义格式,双层逻辑全覆盖。

坑点3:空值处理不规范,出现nan文本

原始数据中的NaN、空白单元格,直接转换后会在Excel显示nan,影响美观和数据使用。

✅ 解决方案:统一捕获空值、字符串nan,全部替换为空单元格。

坑点4:带时分秒的时间戳无法截断

原始数据含2026-05-16 00:00:00带时间的日期,普通格式化会保留时分秒,无法统一格式。

✅ 解决方案:通过pd.to_datetime自动提取年月日,舍弃无用时间部分。

拓展用法(按需开启)

如果需要补零格式(如 05月02日 标准统一格式),只需修改函数内return语句即可:

# 原代码
return f"{dt.month}月{dt.day}日"
# 修改为补零格式
return f"{dt.month:02d}月{dt.day:02d}日"

修改后效果:5月2日05月02日,适合需要统一字符长度的报表场景。

总结

本文提供的Pandas日期格式化方案,完美解决了业务中多格式混杂日期统一处理的痛点,核心优势如下:

1、零数据丢失:全字符串读取,彻底解决浮点精度丢失问题;

2、兼容性极强:支持时间戳、年.月.日、月.日、空值等所有常见格式;

3、容错性高:异常格式自动忽略,程序不会报错中断;

4、开箱即用:支持模拟数据测试+本地文件读取,一键导出Excel。

该代码可直接复用在所有Excel日期清洗场景,大幅提升数据处理效率。

到此这篇关于Pandas批量统一杂乱日期格式为XX月XX日的实现方法的文章就介绍到这了,更多相关Pandas统一杂乱日期格式为XX月XX日内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文