一行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元&…...
(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)
题目:3442. 奇偶频次间的最大差值 I 思路 :哈希,时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况,哈希表这里用数组即可实现。 C版本: class Solution { public:int maxDifference(string s) {int a[26]…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
Qwen3-Embedding-0.6B深度解析:多语言语义检索的轻量级利器
第一章 引言:语义表示的新时代挑战与Qwen3的破局之路 1.1 文本嵌入的核心价值与技术演进 在人工智能领域,文本嵌入技术如同连接自然语言与机器理解的“神经突触”——它将人类语言转化为计算机可计算的语义向量,支撑着搜索引擎、推荐系统、…...
稳定币的深度剖析与展望
一、引言 在当今数字化浪潮席卷全球的时代,加密货币作为一种新兴的金融现象,正以前所未有的速度改变着我们对传统货币和金融体系的认知。然而,加密货币市场的高度波动性却成为了其广泛应用和普及的一大障碍。在这样的背景下,稳定…...
C# 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
React---day11
14.4 react-redux第三方库 提供connect、thunk之类的函数 以获取一个banner数据为例子 store: 我们在使用异步的时候理应是要使用中间件的,但是configureStore 已经自动集成了 redux-thunk,注意action里面要返回函数 import { configureS…...
从“安全密码”到测试体系:Gitee Test 赋能关键领域软件质量保障
关键领域软件测试的"安全密码":Gitee Test如何破解行业痛点 在数字化浪潮席卷全球的今天,软件系统已成为国家关键领域的"神经中枢"。从国防军工到能源电力,从金融交易到交通管控,这些关乎国计民生的关键领域…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...
WPF八大法则:告别模态窗口卡顿
⚙️ 核心问题:阻塞式模态窗口的缺陷 原始代码中ShowDialog()会阻塞UI线程,导致后续逻辑无法执行: var result modalWindow.ShowDialog(); // 线程阻塞 ProcessResult(result); // 必须等待窗口关闭根本问题:…...
【UE5 C++】通过文件对话框获取选择文件的路径
目录 效果 步骤 源码 效果 步骤 1. 在“xxx.Build.cs”中添加需要使用的模块 ,这里主要使用“DesktopPlatform”模块 2. 添加后闭UE编辑器,右键点击 .uproject 文件,选择 "Generate Visual Studio project files",重…...
