何为孤勇?明知不可为而为之,明知人心难测而信之。
前言
这是我自己学习Python的第六篇博客总结。后期我会继续把Python学习笔记开源至博客上。
上一期笔记有关Python的JSON与CSV数据获取,没看过的同学可以去看看:
【Python】JSON与CSV数据获取-CSDN博客https://blog.csdn.net/hsy1603914691/article/details/141925614
数据评估
1. 在获得数据后,需要对原始数据的结构与内容进行评估。
2. 如果数据评估后发现数据不能直接进行分析,需要先进行数据清洗。
数据结构评估
1. 结构方面需要清理的数据叫做乱数据,结构方面不需要清理的数据叫做整洁数据。
2. 整洁数据有以下特点:(列是属性,行是示例)
- 每列是一个变量。
- 每行是一个观察值。
- 每个单元格是一个元素值。
数据内容评估
1. 内容方面需要清理的数据叫做脏数据,内容方面不需要清理的数据叫做干净数据。
2. 脏数据包括:空白数据、重复数据、不一致数据、无效数据、错误数据。
代码实现
1. DataFrame.info()方法可以提供数据的概况信息,包括行(列)的数量、列名、列对应的数据类型 、非空缺值的数量,从宏观上进行评估。
2. DataFrame.head()和DataFrame.tail()方法可以提供开头几行数据或者结尾几行数据,DataFrame.sample()会随机返回几行数据,从具体的数据上进行评估。
3. DataFrame.info()方法得到的非空缺值的数量与行数进行对比,可以得到该列空缺值的数量,从空缺值上进行评估。
5. 无论是Series对象还是DataFrame对象,都有isnull()方法,返回一个布尔值列表或者布尔值图表,能告诉我们原来对象的每个元素值是否为空缺值。
6. 对于DataFrame对象,可以使用DataFrame[列名].isnull()来判断具体某一列的每一项是否有空缺值。
7. 对于DataFrame对象,可以使用DataFrame.isnull().sum()来计算每一列分别有多少空缺值。
8. 对于DataFrame对象,可以使用print(DataFrame[DataFrame[列名].isnull()])来找到某一列存在缺失值的行。
9. 无论是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())
数据清洗
清理索引和列名
1. 如果原始数据的第一行(列名)和第一列(索引)存在问题,那么就可以使用rename(index={})方法和rename(columns={})方法,字典里面的键是原始值,字典里面的值是修改后的值。但这种方法不会修改原来的图表,而是会返回一个新的修改后的图表。
2. 使用set_index("列名")方法可以把这个列名作为索引,并返回一个新的图表。而reset_index()方法可以把当前索引作为一列的列名,然后使用位置索引,并返回一个新的图表。
3. 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)
清理数据内容
1. 整洁的数据要求:
- 每列是一个变量。
- 每行是一个观察值。
- 每个单元格是一个元素值。
2. 如果一个列出现了两个变量,那么就需要对这列进行拆分。DataFrame对象,我们可以使用DataFrame[[新列名1,新列名2]]=DataFrame[列名0].str.split("字符",expand=True),然后使用DataFrame.drop(列名0,axis=1),来去掉原来的列。
3. 如果一个变量出现在两列,那么就需要对这两列进行合并。DataFrame对象,我们可以使用DataFrame[[新列名]]=DataFrame[列名0].str.cat(DataFrame[列名01],sep="拼接分隔符"),然后使用DataFrame.drop(列名0,列名01,axis=1),来去掉原来的列。
4. 宽数据转化成长数据,可以使用pd.melt(DataFrame,id_vars=["需要保留的列名1","需要保留的列名2",var_name="新列列名",value_name="变量值"])。
5. 如果某列数据都是以列表的形式存在,那么可以对该列进行拆分,可以使用DataFrame.explode("要拆分的列")。
处理缺失值
1. 如果缺失值较少,那么可以直接手动定位缺失值位置,并给出新的值。
2. 如果缺失值较多,那么可以使用fillna()方法,会把缺失值替换成传入的参数;当往fillna()中传入的是字典时,可以同时替换不同列的缺失值。
3. 如果我们对缺失值无法进行补充,那么我们可以使用dropna.(subset=[列名]),对这一列参在缺失值的行进行删除。
处理重复数据
1. 当要删除重复的数据时,可以使用drop_duplicates()方法。
2. 删除的数据是第二次出现的值,第一次出现的值保持不变。
3. 统一数据,可以使用replace("原始值",”新值“)来统一数据。
4. 对于Series对象,可以通过astype()方法来改变类型。
5. 对于数值数据,我们可以直接进行计算;对于分类数据,推荐转化为"category"类型。
保存数据
1. 对于DataFrame对象,我们可以使用DataFrame.to_csv(文件路径,index=False)方法,能把数据保存在文件路径上面。
致谢
标签:None,Python,列名,DataFrame,display,数据,csv1,评估 From: https://blog.csdn.net/hsy1603914691/article/details/144813820感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!