前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【Python】数据评估

【Python】数据评估

作者头像
风中的云彩
发布2025-01-12 10:52:12
发布2025-01-12 10:52:12
730
举报
文章被收录于专栏:C/C++的自学之路

何为孤勇?明知不可为而为之,明知人心难测而信之。

前言

这是我自己学习Python的第六篇博客总结。后期我会继续把Python学习笔记开源至博客上。 上一期笔记有关Python的JSON与CSV数据获取,没看过的同学可以去看看: 【Python】JSON与CSV数据获取-CSDN博客

https://cloud.tencent.com/developer/article/2481296

数据评估

在获得数据后,需要对原始数据的结构与内容进行评估。 如果数据评估后发现数据不能直接进行分析,需要先进行数据清洗。

数据结构评估

结构方面需要清理的数据叫做乱数据,结构方面不需要清理的数据叫做整洁数据。 整洁数据有以下特点:(列是属性,行是示例)

  1. 每列是一个变量。
  2. 每行是一个观察值。
  3. 每个单元格是一个元素值。

数据内容评估

内容方面需要清理的数据叫做脏数据,内容方面不需要清理的数据叫做干净数据。 脏数据包括:空白数据、重复数据、不一致数据、无效数据、错误数据。

代码实现

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。

代码语言:javascript
复制
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)方法对列名进行排序。

代码语言:javascript
复制
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. 每行是一个观察值。
  3. 每个单元格是一个元素值。
  4. 如果一个列出现了两个变量,那么就需要对这列进行拆分。DataFrame对象,我们可以使用DataFrame[新列名1,新列名2]=DataFrame列名0.str.split("字符",expand=True),然后使用DataFrame.drop(列名0,axis=1),来去掉原来的列。
  5. 如果一个变量出现在两列,那么就需要对这两列进行合并。DataFrame对象,我们可以使用DataFrame[新列名]=DataFrame列名0.str.cat(DataFrame列名01,sep="拼接分隔符"),然后使用DataFrame.drop(列名0,列名01,axis=1),来去掉原来的列。
  6. 宽数据转化成长数据,可以使用pd.melt(DataFrame,id_vars="需要保留的列名1","需要保留的列名2",var_name="新列列名",value_name="变量值")。
  7. 如果某列数据都是以列表的形式存在,那么可以对该列进行拆分,可以使用DataFrame.explode("要拆分的列")。

处理缺失值

如果缺失值较少,那么可以直接手动定位缺失值位置,并给出新的值。 如果缺失值较多,那么可以使用fillna()方法,会把缺失值替换成传入的参数;当往fillna()中传入的是字典时,可以同时替换不同列的缺失值。 如果我们对缺失值无法进行补充,那么我们可以使用dropna.(subset=列名),对这一列参在缺失值的行进行删除。

处理重复数据

当要删除重复的数据时,可以使用drop_duplicates()方法。 删除的数据是第二次出现的值,第一次出现的值保持不变。 统一数据,可以使用replace("原始值",”新值“)来统一数据。 对于Series对象,可以通过astype()方法来改变类型。 对于数值数据,我们可以直接进行计算;对于分类数据,推荐转化为"category"类型。

保存数据

对于DataFrame对象,我们可以使用DataFrame.to_csv(文件路径,index=False)方法,能把数据保存在文件路径上面。

致谢

感谢您花时间阅读这篇文章!如果您对本文有任何疑问、建议或是想要分享您的看法,请不要犹豫,在评论区留下您的宝贵意见。每一次互动都是我前进的动力,您的支持是我最大的鼓励。期待与您的交流,让我们共同成长,探索技术世界的无限可能!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据评估
    • 数据结构评估
    • 数据内容评估
    • 代码实现
  • 数据清洗
    • 清理索引和列名
    • 清理数据内容
    • 处理缺失值
    • 处理重复数据
  • 保存数据
  • 致谢
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档