PYTHON基础技能 – 一行Python代码实现数据清洗的18种方法

释放双眼,带上耳机,听听看~!

数据清洗可能是你们遇到的第一个大挑战,但别担心,Python的魔力在于能用简洁的代码解决复杂问题。今天,我们就来学习如何用一行代码完成数据清洗的十八个小绝招。准备好,让我们一起化繁为简,成为数据清洗的高手!

1. 去除字符串两边空格


1
data&nbsp;=&nbsp;"&nbsp;&nbsp;&nbsp;Hello&nbsp;World!&nbsp;&nbsp;&nbsp;"<br>cleaned_data&nbsp;=&nbsp;data.strip()&nbsp;&nbsp;<em>#&nbsp;神奇的一行,左右空格拜拜</em>
  • 解读
    1
    strip()

    方法去掉字符串首尾的空白字符,简单高效。

2. 转换数据类型


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

3. 大小写转换


1
text&nbsp;=&nbsp;"Python&nbsp;is&nbsp;Awesome"<br>lower_text&nbsp;=&nbsp;text.lower()&nbsp;&nbsp;<em>#&nbsp;全部变小写,便于统一处理</em><br>upper_text&nbsp;=&nbsp;text.upper()&nbsp;&nbsp;<em>#&nbsp;或者全部大写,随你心情</em>

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


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

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


1
from&nbsp;collections&nbsp;import&nbsp;Counter<br>data&nbsp;=&nbsp;&#091;'apple',&nbsp;'banana',&nbsp;'apple',&nbsp;'orange']<br>counts&nbsp;=&nbsp;dict(Counter(data))&nbsp;&nbsp;<em>#&nbsp;想要知道谁最受欢迎?</em>
  • 解读
    1
    Counter

    是统计神器,轻松获取频率。

6. 字符串分割成列表


1
sentence&nbsp;=&nbsp;"Hello&nbsp;world"<br>words&nbsp;=&nbsp;sentence.split("&nbsp;")&nbsp;&nbsp;<em>#&nbsp;分割符默认为空格,一句话变单词列表</em>

7. 列表合并


1
list1&nbsp;=&nbsp;&#091;1,&nbsp;2,&nbsp;3]<br>list2&nbsp;=&nbsp;&#091;4,&nbsp;5,&nbsp;6]<br>merged_list&nbsp;=&nbsp;list1&nbsp;+&nbsp;list2&nbsp;&nbsp;<em>#&nbsp;合并列表,就这么简单</em>

8. 数据填充


1
my_list&nbsp;=&nbsp;&#091;1,&nbsp;2]<br>filled_list&nbsp;=&nbsp;my_list&nbsp;*&nbsp;3&nbsp;&nbsp;<em>#&nbsp;重复三次,快速填充列表</em>

9. 提取日期时间


1
from&nbsp;datetime&nbsp;import&nbsp;datetime<br>date_str&nbsp;=&nbsp;"2023-04-01"<br>date_obj&nbsp;=&nbsp;datetime.strptime(date_str,&nbsp;"%Y-%m-%d")&nbsp;&nbsp;<em>#&nbsp;日期字符串变对象</em>
  • 关键点
    1
    %Y-%m-%d

    是日期格式,按需调整。

10. 字符串替换


1
old_string&nbsp;=&nbsp;"Python&nbsp;is&nbsp;fun."<br>new_string&nbsp;=&nbsp;old_string.replace("fun",&nbsp;"awesome")&nbsp;&nbsp;<em>#&nbsp;改头换面,一言既出</em>

11. 快速排序


1
numbers&nbsp;=&nbsp;&#091;5,&nbsp;2,&nbsp;9,&nbsp;1,&nbsp;5]<br>sorted_numbers&nbsp;=&nbsp;sorted(numbers)&nbsp;&nbsp;<em>#&nbsp;自然排序,升序默认</em>
  • 进阶
    1
    reverse=True

    可降序排列。

12. 提取数字


1
mixed_str&nbsp;=&nbsp;"The&nbsp;year&nbsp;is&nbsp;2023"<br>nums&nbsp;=&nbsp;''.join(filter(str.isdigit,&nbsp;mixed_str))&nbsp;&nbsp;<em>#&nbsp;只留下数字,其余走开</em>
  • 解密
    1
    filter

    函数配合

    1
    isdigit

    ,只保留数字字符。

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


1
data_list&nbsp;=&nbsp;&#091;None,&nbsp;1,&nbsp;2,&nbsp;None,&nbsp;3]<br>filtered_list&nbsp;=&nbsp;&#091;x&nbsp;for&nbsp;x&nbsp;in&nbsp;data_list&nbsp;if&nbsp;x&nbsp;is&nbsp;not&nbsp;None]&nbsp;&nbsp;<em>#&nbsp;拒绝空值,干净利落</em>
  • 语法糖:列表推导式,简洁优雅。

14. 字典键值对互换


1
my_dict&nbsp;=&nbsp;{"key1":&nbsp;"value1",&nbsp;"key2":&nbsp;"value2"}<br>swapped_dict&nbsp;=&nbsp;{v:&nbsp;k&nbsp;for&nbsp;k,&nbsp;v&nbsp;in&nbsp;my_dict.items()}&nbsp;&nbsp;<em>#&nbsp;翻转乾坤,键变值,值变键</em>

15. 平均值计算


1
numbers&nbsp;=&nbsp;&#091;10,&nbsp;20,&nbsp;30,&nbsp;40]<br>average&nbsp;=&nbsp;sum(numbers)&nbsp;/&nbsp;len(numbers)&nbsp;&nbsp;<em>#&nbsp;平均数,一步到位</em>

16. 字符串分组


1
s&nbsp;=&nbsp;"abcdef"<br>grouped&nbsp;=&nbsp;&#091;s&#091;i:i+2]&nbsp;for&nbsp;i&nbsp;in&nbsp;range(0,&nbsp;len(s),&nbsp;2)]&nbsp;&nbsp;<em>#&nbsp;每两个一组,分割有道</em>
  • 应用:适用于任何需要分组的场景。

17. 数据标准化


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

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


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

进阶实践与技巧

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

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

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


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

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

2. Pandas库的魔法

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


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

3. 错误处理和日志记录

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


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

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

4. 批量操作与函数封装

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


1
def&nbsp;clean_phone(phone):<br>&nbsp;&nbsp;&nbsp;&nbsp;"""移除电话号码中的非数字字符"""<br>&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;''.join(c&nbsp;for&nbsp;c&nbsp;in&nbsp;phone&nbsp;if&nbsp;c.isdigit())<br><br>phone_numbers&nbsp;=&nbsp;&#091;'123-456-7890',&nbsp;'(555)&nbsp;555-5555']<br>cleaned_numbers&nbsp;=&nbsp;&#091;clean_phone(phone)&nbsp;for&nbsp;phone&nbsp;in&nbsp;phone_numbers]

通过定义

1
clean_phone

函数,我们可以轻松地清理一批电话号码。

实战建议:

  • 分步进行:不要试图一次性完成所有清洗任务,分步骤处理,逐步优化。
  • 测试数据:在实际数据上测试你的清洗逻辑前,先用小样本或模拟数据验证代码的正确性。
  • 文档和注释:即使是简单的数据清洗脚本,良好的注释也能为未来的自己或其他开发者提供巨大帮助。

给TA打赏
共{{data.count}}人
人已打赏
安全运维

安全运维之道:发现、解决问题的有效闭环

2024-4-14 20:59:36

安全运维

稳定性建设 – 架构优化的关键策略

2025-2-11 17:15:56

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索