何为孤勇?明知不可为而为之,明知人心难测而信之。
前言
这是我自己学习Python的第六篇博客总结。后期我会继续把Python学习笔记开源至博客上。 上一期笔记有关Python的JSON与CSV数据获取,没看过的同学可以去看看: 【Python】JSON与CSV数据获取-CSDN博客
https://cloud.tencent.com/developer/article/2481296
在获得数据后,需要对原始数据的结构与内容进行评估。 如果数据评估后发现数据不能直接进行分析,需要先进行数据清洗。
结构方面需要清理的数据叫做乱数据,结构方面不需要清理的数据叫做整洁数据。 整洁数据有以下特点:(列是属性,行是示例)
内容方面需要清理的数据叫做脏数据,内容方面不需要清理的数据叫做干净数据。 脏数据包括:空白数据、重复数据、不一致数据、无效数据、错误数据。
DataFrame.info()方法可以提供数据的概况信息,包括行(列)的数量、列名、列对应的数据类型 、非空缺值的数量,从宏观上进行评估。 DataFrame.head()和DataFrame.tail()方法可以提供开头几行数据或者结尾几行数据,DataFrame.sample()会随机返回几行数据,从具体的数据上进行评估。 DataFrame.info()方法得到的非空缺值的数量与行数进行对比,可以得到该列空缺值的数量,从空缺值上进行评估。 无论是Series对象还是DataFrame对象,都有isnull()方法,返回一个布尔值列表或者布尔值图表,能告诉我们原来对象的每个元素值是否为空缺值。 对于DataFrame对象,可以使用DataFrame列名.isnull()来判断具体某一列的每一项是否有空缺值。 对于DataFrame对象,可以使用DataFrame.isnull().sum()来计算每一列分别有多少空缺值。 对于DataFrame对象,可以使用print(DataFrame[DataFrame列名.isnull()])来找到某一列存在缺失值的行。 无论是Series对象还是DataFrame对象,都有duplicated()方法,当某行与前面一行完全相同时,会返回Frue。如果DataFrame对象,如果希望指定某几列,则使用参数(subset("列名1","列名2")),当某行与前面一行在这两列上值完全相同时,会返回Frue。
import pandas as pd
csv1=pd.read_csv("C:/Users/风中的云彩2/Desktop/编程/python课件/数据清洗/example1.csv")
with pd.option_context(
'display.max_rows', None, # 显示所有行
'display.max_columns', None, # 显示所有列
'display.width', None, # 自动检测终端宽度
'display.max_colwidth', None # 不截断列内容
):
print(csv1.info())
print(csv1.isnull())
print(csv1["age"].isnull())
如果原始数据的第一行(列名)和第一列(索引)存在问题,那么就可以使用rename(index={})方法和rename(columns={})方法,字典里面的键是原始值,字典里面的值是修改后的值。但这种方法不会修改原来的图表,而是会返回一个新的修改后的图表。 使用set_index("列名")方法可以把这个列名作为索引,并返回一个新的图表。而reset_index()方法可以把当前索引作为一列的列名,然后使用位置索引,并返回一个新的图表。 sort_index()方法对索引进行排序;sort_index(axis=1)方法对列名进行排序。
import pandas as pd
csv1=pd.read_csv("C:/Users/风中的云彩2/Desktop/编程/python课件/数据清洗/example1.csv")
csv1=csv1.rename(columns={"Unnamed: 0":"学号","客户_姓名":"客户姓名","age":"年龄"})
with pd.option_context(
'display.max_rows', None, # 显示所有行
'display.max_columns', None, # 显示所有列000000000000000000000000000
'display.width', None, # 自动检测终端宽度
'display.max_colwidth', None # 不截断列内容
):
print(csv1)
整洁的数据要求:
如果缺失值较少,那么可以直接手动定位缺失值位置,并给出新的值。 如果缺失值较多,那么可以使用fillna()方法,会把缺失值替换成传入的参数;当往fillna()中传入的是字典时,可以同时替换不同列的缺失值。 如果我们对缺失值无法进行补充,那么我们可以使用dropna.(subset=列名),对这一列参在缺失值的行进行删除。
当要删除重复的数据时,可以使用drop_duplicates()方法。 删除的数据是第二次出现的值,第一次出现的值保持不变。 统一数据,可以使用replace("原始值",”新值“)来统一数据。 对于Series对象,可以通过astype()方法来改变类型。 对于数值数据,我们可以直接进行计算;对于分类数据,推荐转化为"category"类型。
对于DataFrame对象,我们可以使用DataFrame.to_csv(文件路径,index=False)方法,能把数据保存在文件路径上面。
感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!