2.2 数据清洗
🚩所谓数据清洗,其实就是把重复的数据,或者是空数据,异常数据进行一些操作,比如替换,填充,删除等操作,关于异常值的定义需要根据实际情况去自行规定。
2.2.1 重复数据过滤
import numpy as np import pandas as pd df = pd.DataFrame(data = {'color':['red', 'blue', 'red', 'green', 'blue', None, 'red'], 'price':[10, 20, 10, 15, 20, 0, np.NaN]}) display(df) # 重复数据过滤 df.duplicated() # 判断是否存在重复数据 df.drop_duplicates() # 删除重复数据
2.2.2 空数据过滤
None 和 NaN 都表示空数据,计算时没有区别
None 是 Python 的数据类型
NaN 是 Numpy 的数据类型
import numpy as np import pandas as pd df = pd.DataFrame(data = {'color':['red', 'blue', 'red', 'green', 'blue', None, 'red'], 'price':[10, 20, 10, 15, 20, 0, np.NaN]}) display(df) # 空数据处理 # 比如 df 中的 color:None,price:NaN 就是空数据 display(df.isnull()) # 判断是否存在空数据,存在返回True,否则返回False display(df.dropna()) # 删除空数据 df.fillna(1024) # 填充空数据:空数据全变为1024
2.2.3 指定行或者列进行删除
del df['color'] # 直接删除某列 df
# drop 删除,原数据无变化 # 删除指定列 display(df.drop(labels = ['price'], axis = 1)) display(df) # 删除指定行 display(df.drop(labels = [0, 1, 3], axis = 0)) display(df)
当然,我们也可以设置使得在原数据上直接进行修改:
# inplace 替换:删除原来数据并替换给原数据 # 说白了就是删除数据的意思 df.drop(labels = [0, 1, 3], axis = 0, inplace = True) df
2.2.4 异常值
🚩对于一个正态分布的数据,我们认定 > 3 σ 就是异常值,σ 表示标准差
# 正态分布数据 df = pd.DataFrame(data = np.random.randn(10000, 3)) cnt = df.abs() > 3 * df.std() # df.std() 就是标准差 # 取出第一列是异常的数据 cnt_0 = cnt[0] display(df[cnt_0]) # 获取每一列是异常的数据 cnt_1 = cnt[1] cnt_2 = cnt[2] cnt = cnt_0 | cnt_1 | cnt_2 df[cnt]
还有一种比较简单的方式取出异常值:
cnt = df.abs() > 3 * df.std() # axis = 1 计算每一行,只要一行中有一个 True,返回 True # True 就表示的是异常值 cnt_ = cnt.any(axis = 1) df[cnt_]