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

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

摘要

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

项目背景

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

  • 标准时间戳格式:2026-05-16 00:00:00
  • 年.月.日字符串格式:2026.5.18
  • 简写月.日格式:5.265.24.21
  • 空值数据:空白单元格、nan、NaT

如果直接使用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日内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解python分布式进程

    详解python分布式进程

    在本专题里,小编给大家讲述了关于python分布式进程的相关知识点内容,需要的朋友们参考下。
    2018-10-10
  • Python中消息订阅应用开发的最优5个方案及代码实现

    Python中消息订阅应用开发的最优5个方案及代码实现

    消息订阅是现代分布式系统中实现异步通信和解耦的核心技术之一,本文将为大家详细介绍一下5种最优的消息订阅方案,感兴趣的小伙伴可以了解下
    2025-03-03
  • python实现通过shelve修改对象实例

    python实现通过shelve修改对象实例

    这篇文章主要介绍了python实现通过shelve修改对象实例,是一个比较实用的技巧,需要的朋友可以参考下
    2014-09-09
  • Python发送email的3种方法

    Python发送email的3种方法

    这篇文章主要介绍了Python发送email的3种方法,本文讲解了使用登录邮件服务器方法、调用sendmail命令、使用smtp服务来发送三种方法,需要的朋友可以参考下
    2015-04-04
  • 18个帮你简化代码的Python技巧分享

    18个帮你简化代码的Python技巧分享

    选择学习 python 时,最令我震惊的是它的简单性和可读性。但是你知道还可以用更少的代码行可以让 Python 代码变得更简单吗?本文为大家总结了18个帮你简化代码的Python技巧,感兴趣的可以了解一下
    2022-07-07
  • 详解pandas中MultiIndex和对象实际索引不一致问题

    详解pandas中MultiIndex和对象实际索引不一致问题

    这篇文章主要介绍了详解pandas中MultiIndex和对象实际索引不一致问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • python和mysql交互操作实例详解【基于pymysql库】

    python和mysql交互操作实例详解【基于pymysql库】

    这篇文章主要介绍了python和mysql交互操作,结合实例形式详细分析了Python基于pymysql库实现mysql数据库的连接、增删改查等各种常见操作技巧,需要的朋友可以参考下
    2019-06-06
  • python中sys模块的介绍与实例

    python中sys模块的介绍与实例

    这篇文章主要给大家介绍了关于python中sys模块的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • python使用plot绘制未来15天气温折线图

    python使用plot绘制未来15天气温折线图

    本文主要介绍了py使用plot绘制未来15天气温折线图,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • python 监控某个进程内存的情况问题

    python 监控某个进程内存的情况问题

    这篇文章主要介绍了python 监控某个进程内存的情况问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05

最新评论