当前位置: 首页 > 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函数,我们可以轻松地清理一批电话号码。

实战建议:

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

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

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

http://www.lryc.cn/news/404530.html

相关文章:

  • Java API练习 (1) (2024.7.20)
  • JavaScript之WebAPIs-BOM
  • Math Reference Notes: 数学思想和方法
  • Spring Cloud GateWay(4.1.4)
  • 基于PHP+MYSQL开发制作的趣味测试网站源码
  • 【微信小程序】wx.navigateTo传参时不能使用const定义的数据类型
  • 【Android studio环境搭建】Android studio连接夜神模拟器
  • Qt:26.Qt项目:贪吃蛇游戏
  • 通过HTML/CSS 实现各类进度条的功能。
  • Opencv学习项目3——人脸识别
  • 【js自学打卡11】生成器函数(generator函数)的使用总结+代码举例
  • 深入了解jdbc-02-CRUD
  • 《基于 Kafka + Quartz 实现时限质控方案》
  • 浏览器的卡顿与react的解决思路
  • XXE:XML外部实体引入
  • 3D培训大师创新培训体验,加速空调关键组件的高效精准安装
  • PyTorch 深度学习实践-循环神经网络(高级篇)
  • 这才是老板喜欢的电子信息类简历
  • MySQL学习之事务,锁机制
  • 开源知识付费小程序源码 内容付费系统php源码 含完整图文部署教程
  • 时序数据库如何选型?详细指标总结!
  • 【前端】JavaScript入门及实战51-55
  • 【引领未来智造新纪元:量化机器人的革命性应用】
  • 山东航空小程序查询
  • MySQL添加索引时会锁表吗?
  • 算法日记day 16(二叉树的广度优先遍历|反转、对称二叉树)
  • PolarisMesh源码系列--Polaris-Go注册发现流程
  • vue3 vxe-grid修改currentPage,查询数据的时候,从第一页开始查询
  • 电商数据集成之电商商品信息采集系统架构设计||电商API接口
  • Spring Cloud Stream 实现统一消息通信平台