导读:此前的文章《一文看懂数据清洗:缺失值、异常值和重复值的处理》中,我们介绍了数据清洗的过程和方法,本文给出各步骤的详细代码,方便你动手操作。
作者:宋天龙
如需转载请联系大数据(ID:hzdashuju)
import pandas as pd # 导入Pandas库
import numpy as np # 导入Numpy库
from sklearn.preprocessing import Imputer # 导入sklearn.preprocessing中的Imputer库
# 生成缺失数据
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)
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
# 查看哪些值缺失
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) # 打印输出
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
col1 False
col2 True
col3 False
col4 True
dtype: bool
col1 False
col2 False
col3 False
col4 False
dtype: bool
df2 = df.dropna() # 直接丢弃含有NA的行记录
print(df2) # 打印输出
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
2 -0.629461 1.892790 -1.850006 0.157567
3 0.544860 -1.230804 0.836615 -0.945712
5 1.928313 -1.376593 -1.557721 0.289643
nan_model = Imputer(missing_values='NaN', strategy='mean', axis=0) # 建立替换规则:将值为NaN的缺失值以均值做替换
nan_result = nan_model.fit_transform(df) # 应用模型规则
print(nan_result) # 打印输出
[[-0.11241503 -0.76818022 -0.08485904 0.29669147]
[-1.77731513 -0.44946793 -0.16661458 -0.62875601]
[-0.62946127 1.89278959 -1.85000643 0.15756702]
[ 0.54486026 -1.23080434 0.836615 -0.9457117 ]
[ 0.70339369 -0.76455205 -1.21437918 -0.16611331]
[ 1.92831315 -1.37659263 -1.55772092 0.28964265]]
nan_result_pd1 = df.fillna(method='backfill') # 用后面的值替换缺失值
nan_result_pd2 = df.fillna(method='bfill', limit=1) # 用后面的值替代缺失值,限制每列只能替代一个缺失值
nan_result_pd3 = df.fillna(method='pad') # 用前面的值替换缺失值
nan_result_pd4 = df.fillna(0) # 用0替换缺失值
nan_result_pd5 = df.fillna({'col2': 1.1, 'col4': 1.2}) # 用不同值替换不同列的缺失值
nan_result_pd6 = df.fillna(df.mean()['col2':'col4']) # 用各自列的平均数替换缺失值
# 打印输出
print(nan_result_pd1) # 打印输出
print(nan_result_pd2) # 打印输出
print(nan_result_pd3) # 打印输出
print(nan_result_pd4) # 打印输出
print(nan_result_pd5) # 打印输出
print(nan_result_pd6) # 打印输出
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
1 -1.777315 1.892790 -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 0.289643
5 1.928313 -1.376593 -1.557721 0.289643
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
1 -1.777315 1.892790 -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 0.289643
5 1.928313 -1.376593 -1.557721 0.289643
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
1 -1.777315 -0.768180 -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 -0.945712
5 1.928313 -1.376593 -1.557721 0.289643
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
1 -1.777315 0.000000 -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 0.000000
5 1.928313 -1.376593 -1.557721 0.289643
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
1 -1.777315 1.100000 -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 1.200000
5 1.928313 -1.376593 -1.557721 0.289643
col1 col2 col3 col4
0 -0.112415 -0.768180 -0.084859 0.296691
1 -1.777315 -0.449468 -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 -0.166113
5 1.928313 -1.376593 -1.557721 0.289643
import pandas as pd # 导入Pandas库
df = pd.DataFrame({'col1': [1, 120, 3, 5, 2, 12, 13],
'col2': [12, 17, 31, 53, 22, 32, 43]})
print(df) # 打印输出
col1 col2
0 1 12
1 120 17
2 3 31
3 5 53
4 2 22
5 12 32
6 13 43
df_zscore = df.copy() # 复制一个用来存储Z-score得分的数据框
cols = df.columns # 获得数据框的列名
for col in cols: # 循环读取每列
df_col = df[col] # 得到每列的值
z_score = (df_col - df_col.mean()) / df_col.std() # 计算每列的Z-score得分
df_zscore[col] = z_score.abs() > 2.2 # 判断Z-score得分是否大于2.2,如果是则为True,否则为False
print(df_zscore) # 打印输出
col1 col2
0 False False
1 True False
2 False False
3 False False
4 False False
5 False False
6 False False
df_drop_outlier = df[df_zscore['col1'] == False]
print(df_drop_outlier)
col1 col2
0 1 12
2 3 31
3 5 53
4 2 22
5 12 32
6 13 43
import pandas as pd # 导入Pandas库
data1, data2, data3, data4 = ['a', 3], ['b', 2], ['a', 3], ['c', 2]
df = pd.DataFrame([data1, data2, data3, data4], columns=['col1', 'col2'])
print(df)
col1 col2
0 a 3
1 b 2
2 a 3
3 c 2
isDuplicated = df.duplicated() # 判断重复数据记录
print(isDuplicated) # 打印输出
0 False
1 False
2 True
3 False
dtype: bool
print(df.drop_duplicates()) # 删除数据记录中所有列值相同的记录
print(df.drop_duplicates(['col1'])) # 删除数据记录中col1值相同的记录
print(df.drop_duplicates(['col2'])) # 删除数据记录中col2值相同的记录
print(df.drop_duplicates(['col1', 'col2'])) # 删除数据记录中指定列(col1/col2)值相同的记录
col1 col2
0 a 3
1 b 2
3 c 2
col1 col2
0 a 3
1 b 2
3 c 2
col1 col2
0 a 3
1 b 2
col1 col2
0 a 3
1 b 2
3 c 2
关于作者:宋天龙,深大数据技术专家,触脉咨询合伙人兼副总裁,前Webtrekk中国区技术和咨询负责人(德国最大在线数据分析服务提供商)。擅长数据挖掘、建模、分析与运营,精通端到端数据价值场景设计、业务需求转换、数据结构梳理、数据建模与学习以及数据工程交付。在电子商务、零售、银行、保险等多个行业拥有丰富的数据项目工作经验。
本文摘编自《Python数据分析与数据化运营》(第2版),经出版方授权发布。
延伸阅读《Python数据分析与数据化运营》
(第2版)
点击上图了解及购买
转载请联系微信:DoctorData
推荐语:这是一本将数据分析技术与数据使用场景深度结合的著作,从实战角度讲解了如何利用Python进行数据分析和数据化运营。本书与同类书大的不同在于,并不只有纯粹的关于数据分析技术和工具的讲解,而且还与数据使用场景深度结合,在业务上真正可指导落地。此外,本书作者提供微信、邮箱等,可通过实时和离线两种方式及时为读者在线传道、受业、解惑。
「大数据」内容合伙人之「鉴书小分队」上线啦!
最近,你都在读什么书?有哪些心得体会想要跟大家分享?
数据叔最近搞了个大事——联合优质图书出版商机械工业出版社华章公司发起鉴书活动。
简单说就是:你可以免费读新书,你可以免费读新书的同时,顺手码一篇读书笔记就行。详情请在大数据公众号后台对话框回复合伙人查看。
福利时间?
北京第二十六届国际图书博览会(BIBF)如约而至
爱读书的你绝对不能错过!
数据叔的福利也如约而至
报名参加BIBF华章图书现场活动的小伙伴们
即可来展位报销门票哟!
有话要说?
Q: 关于数据清洗,你还有哪些问题?
欢迎留言与大家分享
猜你想看?
从游戏AI到自动驾驶,一文看懂强化学习的概念及应用
什么是机器学习?有哪些分类?到底有什么用?终于有人讲明白了
6本豆瓣高分书,国内外的技术大牛都在看!
关于机器学习的知识点,全在这篇文章里了
更多精彩?
在公众号对话框输入以下关键词
查看更多优质内容!
PPT | 报告 | 读书 | 书单 | 干货
大数据 | 揭秘 | Python | 可视化
AI | 人工智能 | 5G | 区块链
机器学习 | 深度学习 | 神经网络
合伙人 | 1024 | 段子 | 数学 | 高考
据统计,99%的大咖都完成了这个神操作
?
觉得不错,请把这篇文章分享给你的朋友
转载 / 投稿请联系:[email protected]
更多精彩,请在后台点击“历史文章”查看
点击阅读原文,了解更多