0

0

Pandas DataFrame日期字符串处理:精确截取至年份并标准化日期格式

碧海醫心

碧海醫心

发布时间:2025-10-06 12:05:29

|

221人浏览过

|

来源于php中文网

原创

Pandas DataFrame日期字符串处理:精确截取至年份并标准化日期格式

本文旨在提供使用Pandas库处理DataFrame中日期字符串的专业教程。针对日期列中包含多余信息的情况,我们将详细介绍如何利用正则表达式结合str.replace和str.extract方法,高效地清理和标准化日期字符串,确保仅保留至年份的完整日期信息。教程将包含详细的代码示例和正则表达式解析,帮助读者掌握精确的数据清洗技巧。

在数据分析和预处理过程中,我们经常会遇到日期字段包含非标准格式或额外信息的情况。例如,日期字符串可能包含时间戳、括号内的注释或其他无关字符,而我们通常只需要保留日期部分,精确到年份。本教程将展示如何利用pandas的字符串方法和正则表达式,实现对dataframe中日期列的精确清洗。

初始数据结构示例

假设我们有一个Pandas DataFrame,其中包含一个名为date的列,其内容如下:

import pandas as pd

data = {
    'id': [1, 2, 3],
    'date': [
        '21 July 2023 (abcd)',
        '22 July 2023 00:00:01',
        '23 July 2023 -abcda'
    ]
}
df = pd.DataFrame(data)
print("原始DataFrame:")
print(df)

我们的目标是将date列清洗为以下格式:

   id          date
0   1  21 July 2023
1   2  22 July 2023
2   3  23 July 2023

接下来,我们将介绍两种主要的方法来实现这一目标。

方法一:使用 str.replace 结合正向后行断言

这种方法利用正则表达式的正向后行断言 (Positive Lookbehind) 来定位年份,然后移除其后的所有内容。

原理说明

str.replace 方法允许我们使用正则表达式来查找并替换字符串中的模式。通过在正则表达式中引入正向后行断言,我们可以指定一个模式必须紧跟在另一个模式之后,但不会将前一个模式包含在匹配结果中。

正则表达式解析

r'(?<=\b\d{4}\b).*'

  • r'': 表示这是一个原始字符串,避免反斜杠的转义问题。
  • (?<=\b\d{4}\b): 这是正向后行断言。
    • \b: 单词边界,确保匹配的是独立的四位数字,而不是其他数字串的一部分。
    • \d{4}: 匹配任意四位数字,代表年份。
    • (?<=...): 确保匹配的模式前面紧跟着...中的内容。在这个例子中,它确保匹配发生在四位年份数字之后。
  • .*: 匹配零个或多个任意字符(除了换行符)。这意味着它会匹配从年份之后开始的所有内容。

我们将匹配到的.*部分替换为空字符串'',从而达到移除年份之后所有内容的目的。

代码示例

# 方法一:使用 str.replace 结合正向后行断言
df_method1 = df.copy()
df_method1['date'] = df_method1['date'].str.replace(r'(?<=\b\d{4}\b).*', '', regex=True)
print("\n方法一结果 (str.replace):")
print(df_method1)

方法二:使用 str.extract 进行模式匹配提取

这种方法直接定义我们想要保留的日期模式,然后使用 str.extract 将其从原始字符串中提取出来。

原理说明

str.extract 方法用于从字符串中提取与正则表达式模式匹配的子串。如果正则表达式包含捕获组(即用括号()括起来的部分),str.extract 将返回这些捕获组的内容。

阿里妈妈·创意中心
阿里妈妈·创意中心

阿里妈妈营销创意中心

下载

正则表达式解析

r'(\d+ [a-zA-Z]+ \d{4})'

  • (): 定义一个捕获组,我们希望提取的内容将由这个组捕获。
  • \d+: 匹配一个或多个数字,通常对应日期中的“日”。
  • ` `: 匹配一个空格。
  • [a-zA-Z]+: 匹配一个或多个字母,通常对应日期中的“月”(如 "July")。
  • ` `: 匹配一个空格。
  • \d{4}: 匹配恰好四位数字,对应日期中的“年”。

这个正则表达式精确地匹配了“日 月 年”的格式,并将其作为捕获组提取出来。

代码示例

# 方法二:使用 str.extract 进行模式匹配提取
df_method2 = df.copy()
df_method2['date'] = df_method2['date'].str.extract(r'(\d+ [a-zA-Z]+ \d{4})', expand=False)
print("\n方法二结果 (str.extract):")
print(df_method2)

注意:expand=False 参数确保返回的是一个 Series 而不是 DataFrame,这在提取单个捕获组时是常见的做法。

注意事项与选择建议

  1. 特定年份与任意四位年份的区别

    • 在方法一的正则表达式 (?<=\b\d{4}\b).* 中,\d{4} 匹配的是任意四位数字作为年份。
    • 如果你的需求是只在特定年份(例如,仅针对“2023”)之后进行截断,你可以将 \d{4} 替换为具体的年份,如 (?<=\b2023\b).*。
    • 方法二的 \d{4} 同样匹配任意四位数字年份。如果你需要匹配特定年份,可以直接将 \d{4} 替换为 2023。
  2. 方法选择

    • str.replace 结合正向后行断言:当你的目标是“移除某个模式之后的所有内容”时,此方法非常直观和高效。它不关心年份之前的日期格式,只要能识别年份即可。
    • str.extract 进行模式匹配提取:当你知道你想要提取的确切模式(例如“日 月 年”)时,此方法更为精确。它直接提取符合模式的部分,对于格式相对固定的日期字符串非常有效。如果原始字符串中可能存在多个看起来像日期的模式,str.extract 会提取第一个匹配项。
  3. 效率考量

    • Pandas的str.replace和str.extract通常都经过优化,对于大多数数据集都能提供良好的性能。
    • 原始问题中提到的一种变体 df['date'].str.split(r'(?<=2023)', regex=True).str.get(0) 也可以实现类似功能,但它涉及两次str操作(split和get),通常会比单次str.replace或str.extract效率略低。在处理大规模数据时,应优先考虑单次操作的解决方案。

总结

本教程详细介绍了两种在Pandas DataFrame中清理日期字符串的有效方法,旨在保留日期至年份并移除所有后续冗余信息。通过str.replace结合正向后行断言,我们可以灵活地移除年份后的内容;而str.extract则允许我们精确地提取符合特定日期模式的字符串。理解并掌握这些正则表达式技巧,将大大提升你在数据预处理阶段的效率和准确性。选择哪种方法取决于你的具体需求和原始数据的特点。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js正则表达式
js正则表达式

php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

531

2023.06.20

正则表达式不包含
正则表达式不包含

正则表达式,又称规则表达式,,是一种文本模式,包括普通字符和特殊字符,是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串,通常被用来检索、替换那些符合某个模式的文本。php中文网给大家带来了有关正则表达式的相关教程以及文章,希望对大家能有所帮助。

258

2023.07.05

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

767

2023.07.05

java正则表达式匹配字符串
java正则表达式匹配字符串

在Java中,我们可以使用正则表达式来匹配字符串。本专题为大家带来java正则表达式匹配字符串的相关内容,帮助大家解决问题。

219

2023.08.11

正则表达式空格
正则表达式空格

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。本专题为大家提供正则表达式相关的文章、下载、课程内容,供大家免费下载体验。

357

2023.08.31

Python爬虫获取数据的方法
Python爬虫获取数据的方法

Python爬虫可以通过请求库发送HTTP请求、解析库解析HTML、正则表达式提取数据,或使用数据抓取框架来获取数据。更多关于Python爬虫相关知识。详情阅读本专题下面的文章。php中文网欢迎大家前来学习。

293

2023.11.13

正则表达式空格如何表示
正则表达式空格如何表示

正则表达式空格可以用“s”来表示,它是一个特殊的元字符,用于匹配任意空白字符,包括空格、制表符、换行符等。想了解更多正则表达式空格怎么表示的内容,可以访问下面的文章。

245

2023.11.17

正则表达式中如何匹配数字
正则表达式中如何匹配数字

正则表达式中可以通过匹配单个数字、匹配多个数字、匹配固定长度的数字、匹配整数和小数、匹配负数和匹配科学计数法表示的数字的方法匹配数字。更多关于正则表达式的相关知识详情请看本专题下面的文章。php中文网欢迎大家前来学习。

548

2023.12.06

TypeScript类型系统进阶与大型前端项目实践
TypeScript类型系统进阶与大型前端项目实践

本专题围绕 TypeScript 在大型前端项目中的应用展开,深入讲解类型系统设计与工程化开发方法。内容包括泛型与高级类型、类型推断机制、声明文件编写、模块化结构设计以及代码规范管理。通过真实项目案例分析,帮助开发者构建类型安全、结构清晰、易维护的前端工程体系,提高团队协作效率与代码质量。

49

2026.03.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
WEB前端教程【HTML5+CSS3+JS】
WEB前端教程【HTML5+CSS3+JS】

共101课时 | 10.3万人学习

JavaScript正则表达式基础与实战
JavaScript正则表达式基础与实战

共11课时 | 1.5万人学习

布尔教育正则表达式视频教程
布尔教育正则表达式视频教程

共14课时 | 4.7万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号