0

0

Pandas 中高效筛选并清空缺失年份的日期字段

碧海醫心

碧海醫心

发布时间:2026-03-08 10:44:03

|

606人浏览过

|

来源于php中文网

原创

本文介绍如何在 Pandas DataFrame 中高效识别并清空 cleaned_date 列中对应原始字符串(date_from)未显式包含有效年份(如 2019–2025)的记录,避免硬编码冗长条件,推荐使用正则表达式或向量化逻辑组合实现简洁、可维护、高性能的清洗逻辑。

本文介绍如何在 pandas dataframe 中高效识别并清空 `cleaned_date` 列中对应原始字符串(`date_from`)未显式包含有效年份(如 2019–2025)的记录,避免硬编码冗长条件,推荐使用正则表达式或向量化逻辑组合实现简洁、可维护、高性能的清洗逻辑。

在实际数据清洗任务中,常遇到类似场景:从非结构化日期文本(如 "21 JUNE 23.59")中提取标准日期,但因原始文本缺失年份信息,导致解析器误补默认年份(如自动设为 2024),造成数据失真。此时需精准定位“无年份标识”的行,并将已错误填充的 cleaned_date 置为 None。手动罗列所有年份(2019, 2020, ..., 2025)并用多重 ~str.contains() 拼接不仅代码冗长、易出错,且难以维护和扩展。

推荐方案一:正则表达式(最简洁高效)
利用 str.contains() 的正则能力,一行即可覆盖年份范围与特殊值(如 'nan'):

import pandas as pd

# 示例数据
df = pd.DataFrame({
    'x': [1, 2, 3, 4, 5, 6],
    'date_from': [
        '21 JUNE 23.59',
        '18TH JUN 23:59',
        '01TH JULY (23.59 HRS)',
        '28th June 2023',
        '5TH MAY 2023',
        'JUNE 27, 2023'
    ],
    'cleaned_date': [
        '2024-06-23', '2024-06-18', '2024-07-01',
        '2023-06-28', '2023-05-05', '2023-06-27'
    ]
})

# ✅ 一行正则:匹配 'nan' 或 2019 / 2020–2025;取反后置 None
df.loc[~df['date_from'].str.contains(r'nan|(?:2019|202[0-5])', case=False, na=False), 'cleaned_date'] = None

? 正则说明:

AI封面生成器
AI封面生成器

专业的AI封面生成工具,支持小红书、公众号、小说、红包、视频封面等多种类型,一键生成高质量封面图片。

下载
  • nan:匹配字符串 'nan'(处理缺失值转为字符串后的场景)
  • |:逻辑“或”
  • (?:2019|202[0-5]):非捕获组,匹配 2019 或 2020–2025(202[0-5] 是高效缩写)
  • case=False:忽略大小写(适配 JUNE/june)
  • na=False:确保 NaN 值在 str.contains() 中返回 False,避免布尔索引报错

推荐方案二:动态条件组合(适合复杂逻辑或非正则场景)
若需保留显式年份列表(如从配置文件读取)、或后续需扩展其他规则(如排除特定月份),可用 numpy.logical_or.reduce 向量化构建条件:

import numpy as np

years = ['nan', '2019', '2020', '2021', '2022', '2023', '2024', '2025']
# 构建各年份的布尔 Series,再按行逻辑 OR 合并
contains_any = np.logical_or.reduce([
    df['date_from'].astype('string').str.contains(year, case=False, na=False)
    for year in years
])
# 取反:不包含任何有效年份 → 清空 cleaned_date
df.loc[~contains_any, 'cleaned_date'] = None

⚠️ 关键注意事项

  • 永远启用 na=False:str.contains() 对 NaN 默认返回 NaN,会导致布尔索引失败;设 na=False 保证返回 False。
  • 慎用 astype('str'):若列含 NaN,astype('str') 会转为字符串 'nan',此时 str.contains('nan') 可能误匹配真实文本(如 'user_nan_id')。优先用 astype('string')(pandas 1.0+)或直接依赖 str.contains(..., na=False) 处理空值。
  • 性能对比:正则方案单次扫描,O(n);列表推导 + logical_or.reduce 需对每个年份扫描全列,O(n×m),年份多时正则更优。
  • 扩展性建议:将年份范围封装为变量(如 valid_years = list(range(2019, 2026))),再生成正则 f'(?:{"|".join(map(str, valid_years))})',兼顾可读与灵活性。

最终结果中,前三行因 date_from 不含任何指定年份(仅含 23.59 等时间片段),其 cleaned_date 被置为 None;后三行含明确年份(2023),保留原值。此方法彻底摆脱硬编码陷阱,兼具专业性、健壮性与工程可维护性。

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

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

豆包大模型
豆包大模型

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

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

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

文心一言
文心一言

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

讯飞写作
讯飞写作

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

即梦AI
即梦AI

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

ChatGPT
ChatGPT

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

相关专题

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

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

530

2023.06.20

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

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

258

2023.07.05

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

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

766

2023.07.05

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

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

219

2023.08.11

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

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

356

2023.08.31

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

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

293

2023.11.13

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

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

244

2023.11.17

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

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

547

2023.12.06

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

23

2026.03.06

热门下载

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

精品课程

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

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