![e0ff974eaf6f3a4b726f151d65a65d99.png](https://i-blog.csdnimg.cn/blog_migrate/99ddc62f0143b3e50702d25a5d16523b.jpeg)
作者:Zarten 知乎专栏:python数据分析与挖掘深入详解 知乎ID: Zarten 简介: 互联网一线工作者,尊重原创并欢迎评论留言指出不足之处,也希望多些关注和点赞是给作者最好的鼓励 !
概述
在做数据分析的工作中,大部分的时间都是在处理数据清洗及准备阶段。下面将介绍一些数据清洗的常用手段,包括处理缺失数据、重复数据、数据转换等。
去除缺失数据
import numpy as np
import pandas as pd
zarten_df = pd.DataFrame([[1,2,np.nan],[4,5,6],[np.nan,8,9]])
![fe384bf62c976c984688cca99287ae08.png](https://i-blog.csdnimg.cn/blog_migrate/7269917813039bf0c40617cec5f1f273.jpeg)
可以使用DataFrame对象的isnull()方法查看是否为缺失值
![14e49b23b7a434a4950372820c43f1c8.png](https://i-blog.csdnimg.cn/blog_migrate/c68bf0c6813fb6dbd4cb68bfb7d4ef74.jpeg)
删除缺失值使用DataFrame对象的dropna()函数
- 删除带有NaN的整行
使用dropna(),参数axis=0,也是默认值
![9c054816f73569725b8c4ac4d8cea22b.png](https://i-blog.csdnimg.cn/blog_migrate/65a2b60950e9d670029389d1346e4ebb.jpeg)
- 删除带有NaN的整列
使用参数axis=1即可
![20b2662f54b5368ba0c5c3c22024d349.png](https://i-blog.csdnimg.cn/blog_migrate/cf002455772d37f5a7a93d4cb959f36f.jpeg)
- 删除整行每个值都是NaN
只需传入参数 how='all'即可
![17a1bc7fa6a9bac5d4b147128864a9d1.png](https://i-blog.csdnimg.cn/blog_migrate/9c838c5d7450f12b1c59f8330541cc17.jpeg)
从上图看到,由于没有整行都是NaN的值,所以还是原数据。
填充缺失数据
使用函数fillna()
import numpy as np
import pandas as pd
zarten_df = pd.DataFrame([[1,2,np.nan],[4,5,6],[np.nan,8,9]])
- 传入一个数值
传入一个数值后NaN被这个数值所填充
![ac9531014d71ec90d3dfa93fae53d254.png](https://i-blog.csdnimg.cn/blog_migrate/2c8363f30c9564dc8e567288f57488e1.jpeg)
- 传入一个字典
传入一个字典可以指定不同的列填充不同的值
![c9369c813b2f47ebf273fe4395387537.png](https://i-blog.csdnimg.cn/blog_migrate/f72c90acb9e1bae228751180d64ba5d9.jpeg)
fillna()函数还有其他参数,如下:
![c085f4cc3bdd3a713ac4285710c7abfa.png](https://i-blog.csdnimg.cn/blog_migrate/d56990b0cf96bf0af480caa2417db5d6.png)
![b50b9a98a21402bb4effce2c528a2cca.png](https://i-blog.csdnimg.cn/blog_migrate/415884f809c08a540fbd843f95626e1c.png)
![a959013ac119dfd927eaf2f10801110d.png](https://i-blog.csdnimg.cn/blog_migrate/912acef916a6b8838aad1a6643c49c61.jpeg)
inplace参数:为True时,可以就地改变原数据
method参数:填充方式,例如向上填充等
limit参数:限制填充前几行
更多用法,请查看官方文档,这里不再一一阐述。
缺失数据相关函数
![fae29ab85f67567ff2c7186081b3feb0.png](https://i-blog.csdnimg.cn/blog_migrate/3690294dd952e1115d7c728ce9142658.jpeg)
重复行处理
有时很多行的数据是一模一样的,有可能需要进一步处理。
import numpy as np
import pandas as pd
zarten_df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,9],[88,88,88],[88,88,88]])
![e16f85488071fff52f425bc2ca103541.png](https://i-blog.csdnimg.cn/blog_migrate/c5f85eee4c43f9c2564da160b12f82c2.jpeg)
- 查看重复行
使用duplicated()函数,若有出现了跟之前一样的行,则将出现的这一行标记为True
![eda6c0237c7754f05bfa2d88b857ddaa.png](https://i-blog.csdnimg.cn/blog_migrate/7e8dc4d619ac4dfdf6f1260990d8ece3.jpeg)
- 指定列进行重复项判断
上面例子是全部列,下面将介绍部分列的判断
只需传入列名即可
import numpy as np
import pandas as pd
zarten_df = pd.DataFrame([[1,2,3],[4,5,6],[7,8,6],[88,88,88],[88,88,88]])
![71afd5ebd1be4bca321226f99e0fbcf2.png](https://i-blog.csdnimg.cn/blog_migrate/ec25420912edef5028259cc0a346c1b3.jpeg)
- 反向处理重复行
上面例子看到,若出现重复行,是最后一样标记为True。若传入参数keep='last',则将第一个出现重复行标记为True
![3240d08ac94286b2624d741c78847fd5.png](https://i-blog.csdnimg.cn/blog_migrate/eeded76026c98a31e4c225dce9b7e73d.jpeg)
- 删除重复行
删除标记为True 的重复行
使用函数drop_duplicates()函数,此函数的参数跟上面的duplicated()一样,这里将不再描述。
![1e59f248f8bd4a220a7a2cbbf2fe5748.png](https://i-blog.csdnimg.cn/blog_migrate/7c888558a3fd042d6e74cc0a94961dc9.jpeg)
替换值
可以使用replace()函数
import pandas as pd
zarten_df = pd.DataFrame([[1,2,3],[4,999,6],[7,8,-888]])
- 替换某个值
![8b7c7a19f429feca565870a756853618.png](https://i-blog.csdnimg.cn/blog_migrate/ac881c311d92d5315aa77f48103a2632.jpeg)
- 替换多个值
可以使用列表或字典,下面演示字典
![4d7eee246c8860507ffe38d476b955d6.png](https://i-blog.csdnimg.cn/blog_migrate/63d8bb6191508c87be4cfbc93ee35699.jpeg)
更多技术方法将在后面章节介绍。