Python代码实操:详解数据清洗

本文由宋天龙撰写,详细介绍了数据清洗的Python实现,包括使用Pandas处理缺失值、异常值和重复值,以及数据填充的各种方法。通过实例代码展示了如何识别和处理缺失值,以及如何利用统计方法和机器学习策略进行数据预处理。
摘要由CSDN通过智能技术生成

640?wx_fmt=gif

导读:此前的文章《一文看懂数据清洗:缺失值、异常值和重复值的处理中,我们介绍了数据清洗的过程和方法,本文给出各步骤的详细代码,方便你动手操作。


作者:宋天龙

如需转载请联系大数据(ID:hzdashuju)


640?wx_fmt=jpeg


本文示例中,主要用了几个知识点:


  • 通过 pd.DataFrame 新建数据框。
  • 通过 df.iloc[] 来选择特定的列或对象。
  • 使用Pandas的 isnull() 判断值是否为空。
  • 使用 all()any() 判断每列是否包含至少1个为True或全部为True的情况。
  • 使用Pandas的 dropna() 直接删除缺失值。
  • 使用 sklearn.preprocessing 中的 Imputer 方法对缺失值进行填充和替换,支持3种填充方法。
  • 使用Pandas的 fillna 填充缺失值,支持更多自定义的值和常用预定义方法。
  • 通过 copy() 获得一个对象副本,常用于原始对象和复制对象同时进行操作的场景。
  • 通过 for 循环遍历可迭代的列表值。
  • 自定义代码实现了 Z-Score 计算公式。
  • 通过Pandas的 duplicated() 判断重复数据记录。
  • 通过Pandas的 drop_duplicates() 删除数据记录,可指定特定列或全部。



01 缺失值处理


在缺失值的处理上,主要配合使用 sklearn.preprocessing 中的Imputer类、Pandas和Numpy。其中由于Pandas对于数据探索、分析和探查的支持较为良好,因此围绕Pandas的缺失值处理较为常用。


1. 导入库


该代码示例中用到Pandas、Numpy和sklearn。


import pandas as pd               # 导入Pandas库
import numpy as np               # 导入Numpy库
from sklearn.preprocessing import Imputer     # 导入sklearn.preprocessing中的Imputer库


2. 生成缺失数据


# 生成缺失数据
df = pd.DataFrame(np.random.randn(6, 4), columns=['col1', 'col2', 'col3', 'col4'])                      # 生成一份数据
df.iloc[1:2, 1] = np.nan            # 增加缺失值
df.iloc[4, 3] = np.nan               # 增加缺失值
print(df)


通过Pandas生成一个6行4列,列名分别为'col1'、'col2'、'col3'、'col4'的数据框。同时,数据框中增加两个缺失值数据。


除了示例中直接通过pd.DataFrame来直接创建数据框外,还可以使用数据框对象的 df.from_records df.from_dict df.from_items 来从元组记录、字典和键值对对象创建数据框,或使用 pandas.read_csv pandas.read_table pandas.read_clipboard 等方法读取文件或剪贴板创建数据框。该代码段执行后返回了定义含有缺失值的数据框,结果如下:


       col1      col2      col3      col4
0 -0.112415 -0.768180 -0.084859  0.296691
1 -1.777315       NaN -0.166615 -0.628756
2 -0.629461  1.892790 -1.850006  0.157567
3  0.544860 -1.230804  0.836615 -0.945712
4  0.703394 -0.764552 -1.214379       NaN
5  1.928313 -1.376593 -1.557721  0.289643


提示:由于生成的数据是随机产生的,因此读者的实际结果可能与上述结果不一致。


3. 判断缺失值


# 查看哪些值缺失
nan_all = df.isnull()      # 获得所有数据框中的N值
print(nan_all)          # 打印输出
# 查看哪些列缺失
nan_col1 = df.isnull().any()    # 获得含有NA的列
nan_col2 = df.isnull().all()    # 获得全部为NA的列
print(nan_col1)              # 打印输出
print(nan_col2)              # 打印输出


通过 df.null() 方法找到所有数据框中的缺失值(默认缺失值是 NaN 格式),然后使用 any() all() 方法来查找含有至少1个或全部缺失值的列,其中 any() 方法用来返回指定轴中的任何元素为 True ,而 all() 方法用来返回指定轴的所有元素都为 True 。该代码段执行后返回如下结果。


判断元素是否是缺失值(第2行第2列和第5行第4列):


   col1   col2   col3   col4
0  False  False  False  False
1  False   True  False  False
2  False  False  False  False
3  False  False  False  False
4  False  False  False   True
5  False  False  False  False


列出至少有一个元素含有缺失值的列(该示例中为col2和col4):


col1    False
col2     True
col3    False
col4     True
dtype: bool


列出全部元素含有缺失值的列(该示例中没有):


col1    False
col2    False
col3    False
col4    False
dtype: bool


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值