当前位置: 首页 > news >正文

一行Python代码实现数据清洗的18种方法

目录

1. 去除字符串两边空格

2. 转换数据类型

3. 大小写转换

4. 移除列表中的重复元素

5. 快速统计元素出现次数

6. 字符串分割成列表

7. 列表合并

8. 数据填充

9. 提取日期时间

10. 字符串替换

11. 快速排序

12. 提取数字

13. 空值处理(假设是列表)

14. 字典键值对互换

15. 平均值计算

16. 字符串分组

17. 数据标准化

18. 数据过滤(基于条件)

进阶实践与技巧

1. 复杂字符串处理:正则表达式

2. Pandas库的魔法

3. 错误处理和日志记录

4. 批量操作与函数封装

实战建议:



数据清洗可能是你们遇到的第一个大挑战,但别担心,Python的魔力在于能用简洁的代码解决复杂问题。今天,我们就来学习如何用一行代码完成数据清洗的十八个小绝招。准备好,让我们一起化繁为简,成为数据清洗的高手!在数据科学和数据分析中,数据清洗是关键的一步,它确保了数据的质量和准确性。虽然一行代码实现18种数据清洗方法可能过于简化,但我们可以展示如何使用Pandas库在Python中通过一行代码来实现一些常见的数据清洗任务。以下示例将使用Pandas库,这是一个广泛使用于数据分析的Python库。

1. 去除字符串两边空格

data = "   Hello World!   "
cleaned_data = data.strip()  # 神奇的一行,左右空格拜拜
  • 解读strip()方法去掉字符串首尾的空白字符,简单高效。

2. 转换数据类型

num_str = "123"
num_int = int(num_str)  # 字符串转整数,就是这么直接
  • 注意:转换时要确保数据格式正确,否则会报错。

3. 大小写转换

text = "Python is Awesome"
lower_text = text.lower()  # 全部变小写,便于统一处理
upper_text = text.upper()  # 或者全部大写,随你心情

4. 移除列表中的重复元素

my_list = [1, 2, 2, 3, 4, 4]
unique_list = list(set(my_list))  # 集合特性,去重无压力
  • 小贴士:这招虽好,但改变了原列表顺序哦。

5. 快速统计元素出现次数

from collections import Counter
data = ['apple', 'banana', 'apple', 'orange']
counts = dict(Counter(data))  # 想要知道谁最受欢迎?
  • 解读Counter是统计神器,轻松获取频率。

6. 字符串分割成列表

sentence = "Hello world"
words = sentence.split(" ")  # 分割符默认为空格,一句话变单词列表

7. 列表合并

list1 = [1, 2, 3]
list2 = [4, 5, 6]
merged_list = list1 + list2  # 合并列表,就这么简单

8. 数据填充

my_list = [1, 2]
filled_list = my_list * 3  # 重复三次,快速填充列表

9. 提取日期时间

from datetime import datetime
date_str = "2023-04-01"
date_obj = datetime.strptime(date_str, "%Y-%m-%d")  # 日期字符串变对象
  • 关键点%Y-%m-%d是日期格式,按需调整。

10. 字符串替换

old_string = "Python is fun."
new_string = old_string.replace("fun", "awesome")  # 改头换面,一言既出

11. 快速排序

numbers = [5, 2, 9, 1, 5]
sorted_numbers = sorted(numbers)  # 自然排序,升序默认
  • 进阶reverse=True可降序排列。

12. 提取数字

mixed_str = "The year is 2023"
nums = ''.join(filter(str.isdigit, mixed_str))  # 只留下数字,其余走开
  • 解密filter函数配合isdigit,只保留数字字符。

13. 空值处理(假设是列表)

data_list = [None, 1, 2, None, 3]
filtered_list = [x for x in data_list if x is not None]  # 拒绝空值,干净利落
  • 语法糖:列表推导式,简洁优雅。

14. 字典键值对互换

my_dict = {"key1": "value1", "key2": "value2"}
swapped_dict = {v: k for k, v in my_dict.items()}  # 翻转乾坤,键变值,值变键

15. 平均值计算

numbers = [10, 20, 30, 40]
average = sum(numbers) / len(numbers)  # 平均数,一步到位

16. 字符串分组

s = "abcdef"
grouped = [s[i:i+2] for i in range(0, len(s), 2)]  # 每两个一组,分割有道
  • 应用:适用于任何需要分组的场景。

17. 数据标准化

import numpy as np
data = np.array([1, 2, 3])
normalized_data = (data - data.mean()) / data.std()  # 数学之美,标准分布
  • 背景:数据分析必备,让数据符合标准正态分布。

18. 数据过滤(基于条件)

data = [1, 2, 3, 4, 5]
even_numbers = [x for x in data if x % 2 == 0]  # 只留偶数,排除异己
  • 技巧:列表推导结合条件判断,高效筛选。


进阶实践与技巧

既然你已经掌握了基础的十八种方法,接下来让我们深入一些,探讨如何将这些技巧结合起来,解决更复杂的数据清洗问题,并分享一些实战中的小技巧。

1. 复杂字符串处理:正则表达式

正则表达式是数据清洗中不可或缺的工具,虽然严格来说可能超过一行,但它能高效地处理模式匹配和替换。

import re
text = "Email: example@email.com Phone: 123-456-7890"
emails = re.findall(r'\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b', text)
phones = re.findall(r'\b\d{3}-\d{3}-\d{4}\b', text)

这段代码分别提取了文本中的电子邮件和电话号码,展示了正则表达式的强大。

2. Pandas库的魔法

对于数据分析和清洗,Pandas是不二之选。虽然Pandas的命令通常不止一行,但其高效性和简洁性值得学习。

import pandas as pd
df = pd.read_csv('data.csv')
# 删除含有缺失值的行
df_clean = df.dropna()
# 替换特定值
df['column_name'] = df['column_name'].replace('old_value', 'new_value')
  • 注意:Pandas虽然强大,但对于初学者可能需要更多时间来熟悉。

3. 错误处理和日志记录

在处理大量数据时,错误几乎是不可避免的。学会用try-except结构捕获异常,并使用logging记录日志,可以大大提升调试效率。

import logging
logging.basicConfig(level=logging.INFO)
try:result = some_function_that_might_fail()logging.info(f"成功执行!结果:{result}")
except Exception as e:logging.error(f"执行失败:{e}")

这样,即使出现问题,也能迅速定位。

4. 批量操作与函数封装

将常用的数据清洗步骤封装成函数,可以大大提高代码的复用性和可读性。

def clean_phone(phone):"""移除电话号码中的非数字字符"""return ''.join(c for c in phone if c.isdigit())phone_numbers = ['123-456-7890', '(555) 555-5555']
cleaned_numbers = [clean_phone(phone) for phone in phone_numbers]

通过定义clean_phone函数,我们可以轻松地清理一批电话号码。

实战建议:

  • 分步进行:不要试图一次性完成所有清洗任务,分步骤处理,逐步优化。

  • 测试数据:在实际数据上测试你的清洗逻辑前,先用小样本或模拟数据验证代码的正确性。

  • 文档和注释:即使是简单的数据清洗脚本,良好的注释也能为未来的自己或其他开发者提供巨大帮助。

相关文章:

一行Python代码实现数据清洗的18种方法

目录 1. 去除字符串两边空格 2. 转换数据类型 3. 大小写转换 4. 移除列表中的重复元素 5. 快速统计元素出现次数 6. 字符串分割成列表 7. 列表合并 8. 数据填充 9. 提取日期时间 10. 字符串替换 11. 快速排序 12. 提取数字 13. 空值处理(假设是列表&am…...

Java API练习 (1) (2024.7.20)

Date类 package APIExercise20240720; import java.util.Date; // 导包,Date是util下的 public class Date20240720 {public static void main(String[] args) {Date nowTime new Date(); // 得到当前系统时间System.out.println(nowTime);Date startTime new Da…...

JavaScript之WebAPIs-BOM

目录 BOM操作浏览器一、Window对象1.1 BOM(浏览器对象模型)1.2 定时器-延时函数1.3 js执行机制1.4 location对象1.5 navigator对象1.6 history对象 二、本地存储三、补充数组中的map方法数组中的join方法数组中的forEach方法(重点)数组中的filter方法(重…...

Math Reference Notes: 数学思想和方法

文章目录 1. 数学思想1.1 数形结合思想1.2 转化思想1.3 分类讨论思想1.4 整体思想 2. 数学方法2.1 配方法2.2 因式分解法2.3 待定系数法2.4 换元法2.5 构造法2.6 等积法2.7 反证法2.8 判别式法 1. 数学思想 1.1 数形结合思想 定义:将数与形(代数与几何…...

Spring Cloud GateWay(4.1.4)

介绍 该项目提供了一个建立在 Spring 生态系统之上的 API 网关,包括:Spring 6、Spring Boot 3 和 Project Reactor。Spring Cloud Gateway 旨在提供一种简单而有效的方法来路由到 API,并为其提供跨领域关注点,例如:安…...

基于PHP+MYSQL开发制作的趣味测试网站源码

基于PHPMYSQL开发制作的趣味测试网站源码。可在后台提前设置好缘分, 自己手动在数据库里修改数据,数据库里有就会优先查询数据库的信息, 没设置的话第一次查询缘分都是非常好的 95-99,第二次查就比较差 , 所以如果要…...

【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型

2024年7月21日更新 今日调试时发现似乎是因为使用vant-weapp时按照官方提示关闭了style:"v2"导致的此情况,打开之后无法复现该内容,特此提示。 以下是原内容 如题,笔者测试了好久才找到这个bug,想传递的数据是this.d…...

【Android studio环境搭建】Android studio连接夜神模拟器

Android studio连接夜神模拟器 一、 步骤 1.下载好Android Studio和夜神模拟器, 2.打开夜神模拟器,找到其安装目录下的 nox_adb.exe文件 3.右键进入cmd命令打开,管理员权限执行下面命令 PS D:\Program Files\Nox\bin> .\nox_adb.exe connect 127.…...

Qt:26.Qt项目:贪吃蛇游戏

一、项目功能演示: 开始界面可以点击进入游戏。 点击进入游戏之后,切换到选项界面,该界面可以选择游戏难度,回退,以及查询最近一次游戏得分。 游戏具体界面如下。贴图啥的可以自己换,本人审美不咋行&#x…...

通过HTML/CSS 实现各类进度条的功能。

需求:我们在开发中会遇到使用各式各样的进度条,因为当前插件里面进度条各式各样的,为了方便我们定制化的开发和方便修改样式,我们这里使用HTML和CSS样式来进行开发进度条功能。 通过本文学习我们会明白如何使用 HTML/CSS 创建各种…...

Opencv学习项目3——人脸识别

之前我们获取了一张图像的人脸信息,现在我们来使用特征点分析来匹配两张lyf照片的相似度 获取两张图片的人脸信息 import cv2 import face_recognition# 加载图像文件 img1 face_recognition.load_image_file(lyf1.png) img2 face_recognition.load_image_file(l…...

【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例

力扣的js入门免费题刷完了,开始自己找题练练,顺便捡捡知识点 力扣2649 1.思路 一眼递归,但事实证明也可以直接flat手撕。 arr.flat(Infinity) //直接扁平化到最底层涉及到了一些关于生成器和异步编程相关的知识点,学一下。 2.…...

深入了解jdbc-02-CRUD

文章目录 操作和访问数据库Statement操作数据表的弊端sql注入问题PreparedStatement类ResultSet类与ResultSetMetaData类资源的释放批量插入 操作和访问数据库 数据库的调用的不同方式: Statement:用于执行静态 SQL 语句并返回它所生成结果的对象。PreparedStatem…...

《基于 Kafka + Quartz 实现时限质控方案》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 CSDN入驻不久,希望大家多多支持,后续会继续提升文章质量,绝不滥竽充数…...

浏览器的卡顿与react的解决思路

以下内容是阅读过程中结合自己的思考而诞生的产物,不一定准确,但相反的,可能个人对实际情况有很大的误解。 仅做参考,欢迎指正。 前面提到浏览器显示的其实是渲染流程最后渲染出来的一张图片,而一个行为引起的副作用需…...

XXE:XML外部实体引入

XXE漏洞 如果服务器没有对客户端的xml数据进行限制,且版本较低的情况下,就可能会产生xxe漏洞 漏洞利用流程 1.客户端发送xml文件,其中dtd存在恶意的外部实体引用 2.服务器进行解析 3.服务器返回实体引用内容 危害:任意文件读…...

3D培训大师创新培训体验,加速空调关键组件的高效精准安装

如今,空调系统的复杂性和精密性与日俱增,对专业技术人员的要求也日益提高。尤其是决定空调是否能平稳运行的空调关键组件的装配培训,不再局限于传统的理论讲解和实体模型演示,而是更注重数字化、沉浸式学习。 案例背景 某空调公…...

PyTorch 深度学习实践-循环神经网络(高级篇)

视频指路 参考博客笔记 参考笔记二 文章目录 上课笔记总代码练习 上课笔记 个人能力有限,重看几遍吧,第一遍基本看不懂 名字的每个字母都是一个特征x1,x2,x3…,一个名字是一个序列 rnn用GRU 用ASCII表作为词典,长度为128&#x…...

这才是老板喜欢的电子信息类简历

点击可直接使用...

MySQL学习之事务,锁机制

事务 什么是事务? 事务就是逻辑上的一组操作,要么全做,要么全不做 事务经典例子:转账,转账需要两个操作,从一个人账户上减钱,在另一个账户上加钱,比如说小红给小明转账100元&…...

【力扣数据库知识手册笔记】索引

索引 索引的优缺点 优点1. 通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。2. 可以加快数据的检索速度(创建索引的主要原因)。3. 可以加速表和表之间的连接,实现数据的参考完整性。4. 可以在查询过程中,…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络,将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具,支持 Chrome、Firefox、Safari 等主流浏览器,提供多语言 API(Python、JavaScript、Java、.NET)。它的特点包括&a…...

IoT/HCIP实验-3/LiteOS操作系统内核实验(任务、内存、信号量、CMSIS..)

文章目录 概述HelloWorld 工程C/C配置编译器主配置Makefile脚本烧录器主配置运行结果程序调用栈 任务管理实验实验结果osal 系统适配层osal_task_create 其他实验实验源码内存管理实验互斥锁实验信号量实验 CMISIS接口实验还是得JlINKCMSIS 简介LiteOS->CMSIS任务间消息交互…...

2025季度云服务器排行榜

在全球云服务器市场,各厂商的排名和地位并非一成不变,而是由其独特的优势、战略布局和市场适应性共同决定的。以下是根据2025年市场趋势,对主要云服务器厂商在排行榜中占据重要位置的原因和优势进行深度分析: 一、全球“三巨头”…...

HDFS分布式存储 zookeeper

hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...

佰力博科技与您探讨热释电测量的几种方法

热释电的测量主要涉及热释电系数的测定,这是表征热释电材料性能的重要参数。热释电系数的测量方法主要包括静态法、动态法和积分电荷法。其中,积分电荷法最为常用,其原理是通过测量在电容器上积累的热释电电荷,从而确定热释电系数…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...

Linux 下 DMA 内存映射浅析

序 系统 I/O 设备驱动程序通常调用其特定子系统的接口为 DMA 分配内存,但最终会调到 DMA 子系统的dma_alloc_coherent()/dma_alloc_attrs() 等接口。 关于 dma_alloc_coherent 接口详细的代码讲解、调用流程,可以参考这篇文章,我觉得写的非常…...