当前位置: 首页 > news >正文

【数据评估与清洗】对数据结构和内容进行清洗

评估数据

  • 结构方面
    • 需要清理:乱数据
    • 不需要清理:整洁数据
      • 每列是一个变量
      • 每行是一个观察值
      • 每个单元格是一个值
  • 内容方面
    • 需要清理:脏数据
      • 丢失数据
      • 重复数据
      • 不一致数据
      • 无效或错误数据
    • 不需要清理:干净数据
# 获取整体信息
df.info()
# 获取开头/结尾/随机数据来评估
df.head(10)
df.tail(10)
df.sample(10)
# 调整展示上限
pd.set_option("display.max_columns", 150)
pd.set_option("display.max_colwidth", 500)# 评估丢失数据
# 返回布尔值组成的Series或DataFrame
scores["考试2"].isnull()
df.isnull()
# 获取空缺值数量
scores["考试2"].isnull().sum()
df.isnull().sum()
# 提取丢失数据的行
scores[scores["考试2"].isnull()]# 评估重复数据
students["学号"].duplicated()
students.duplicated(subset=["学号","性别"])# 评估不一致数据
students["班级"].value_counts()# 评估无效/错误数据
# 排序
students["身高"].sort_values()
students.describe()

清洗数据

  • 结构方面:更改为整洁数据结构

  • 内容方面

    • 丢失数据
      • 人工填入缺失值
      • 不处理缺失值
      • 把有缺失值的行删除
      • 用例如平均数等填充代替缺失值
    • 重复数据:删除
    • 不一致数据:统一
    • 无效数据:删除或替换
    • 数据类型转换
  • 实际操作

# 重命名索引和列名(原变量不变,需要重新赋值或可选参数inplace=True
df1.rename(index={"2_":"2", "_5":"5", "6*":"6"})
df1.rename(columns={"2_":"2", "_5":"5", "6*":"6"})
df2.rename(index=某函数/方法)
df2.rename(columns=str.upper) # 大写
# 更多Series相关方法:https://pandas.pydata.org/docs/reference/api/pandas.Series.html
# 更多DataFrame相关方法:https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html# 重设索引
# 将列值作为索引
df3.set_index("Salesperson")
# 还原
df3.reset_index()# 对索引和列名重新排序(原变量不变,需要重新赋值或可选参数inplace=True
df4.sort_index()# 对数据进行转置
df1 = df1.T
# 对列进行拆分
df2[["人口", "面积"]] = df2["人口密度"].str.split("/", expand=True)
df2 = df2.drop("人口密度", axis=1)
# 把不同列合并成一列
df3["姓].str.cat(df3[""], sep="-")
# 把宽数据转换成长数据(列名变成列值)
df4 = pf.melt(df4, id_vars=['不变的列名'], var_name='列名所在列列名', value_name='原列值所在列列名')
# 对行进行拆分
df5.explode("课程列表")
# 删除行,删除列(原变量不变,需要重新赋值或可选参数inplace=True
df6.drop(2)
df6.drop(["列","lie"],axis=1)# 对整列缺失值进行填充(索引定位)
df1["国家"] = "中国"
# 对某个缺失值进行填充
df2.loc["003":"004", "销售额"] = 800
# 自动找到缺失值进行填充
df4["B"].fillna(df["B"].mean())
df4.fillna(0)
df4.fillna({'A': 0, 'B': 10}) # 不同列可指定替换值
# 删除存在缺失值的行(原变量不变,需要重新赋值或可选参数inplace=True
df5.dropna()
df5.dropna(subset=["工资"]) # 控制范围
# 删除重复数据(原变量不变,需要重新赋值或可选参数inplace=True
df6["姓名"].drop_duplicates()
df6.drop_duplicates(subset=['a','b'], keep='last') #同时重复,保留最后
# 对值进行替换(不一致数据)(原变量不变,需要重新赋值或可选参数inplace=True
df7.replace(["hnu", "湖大"], "湖南大学")
df7.replace("hnu": "湖南大学")
# 对值的类型进行转换
# 分类数据建议转换为category,有利于减小内存,让Pandas自动选用合适的统计方法或图表类型
s1=pd.Series(["1","2","3"])
s1.astype("category")

保存数据(覆盖原始数据)

df1.to_csv("cleaned_sales_data.csv")
# 读取时会将索引作为第一列,需要更改列名并将其重新设置为索引# 写入时忽略索引(索引无关键信息)
df1.to_csv("cleaned_sales_data2.csv", index=False)

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • SpringBoot 与 Maven 快速上手指南
  • 鹅​文​档​一​面​​
  • Python--循环
  • fastdfs开源分布式文件系统及迁移部署
  • 小学全科电子教材(全阶段全版本)
  • 回归预测|基于卷积神经网络-支持向量机的数据回归预测Matlab程序CNN-SVM 卷积提取特征与原始特征进行融合预测
  • ubuntu命令行设置wifi和宽带连接
  • 如何使用GitHub Desktop管理GitLab库
  • React Native中如何调用iOS的Face ID和Android的生物识别,react-native-biometrics
  • transformer中为什么使用不同的K 和 Q, 为什么不能使用同一个值?
  • SpringBoot-MybatisPlus项目中,在控制台查看sql执行日志的方法
  • FIOT/浙江信达可恩消防股份有限公司25周年庆典隆重召开
  • 网络编程(5)——模拟伪闭包实现连接的安全回收
  • 如何部署北斗定位应用,基于国产自主架构LS2K1000LA-i处理器平台
  • 未来数字世界相关技术、应用:AR/VR/MR;数字人、元宇宙、全息显示
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • 【跃迁之路】【477天】刻意练习系列236(2018.05.28)
  • 2018一半小结一波
  • Docker入门(二) - Dockerfile
  • happypack两次报错的问题
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • js对象的深浅拷贝
  • LeetCode29.两数相除 JavaScript
  • leetcode讲解--894. All Possible Full Binary Trees
  • OSS Web直传 (文件图片)
  • python学习笔记-类对象的信息
  • Rancher如何对接Ceph-RBD块存储
  • vue-loader 源码解析系列之 selector
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 如何邀请好友注册您的网站(模拟百度网盘)
  • 通信类
  • 网页视频流m3u8/ts视频下载
  • 小程序button引导用户授权
  • 学习JavaScript数据结构与算法 — 树
  • 一个完整Java Web项目背后的密码
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • C# - 为值类型重定义相等性
  • 阿里云ACE认证学习知识点梳理
  • # include “ “ 和 # include < >两者的区别
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #在 README.md 中生成项目目录结构
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (javaweb)Http协议
  • (八)c52学习之旅-中断实验
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (分享)自己整理的一些简单awk实用语句
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (四)图像的%2线性拉伸
  • (转)人的集合论——移山之道
  • (最全解法)输入一个整数,输出该数二进制表示中1的个数。
  • *2 echo、printf、mkdir命令的应用
  • .gitignore文件—git忽略文件
  • .NET Core SkiaSharp 替代 System.Drawing.Common 的一些用法
  • .Net MVC4 上传大文件,并保存表单
  • .NET Standard 的管理策略