数据分析师的学习之路-pandas篇(6)

接上篇,画图告一段落,现在学习表格的各种操作。

3.8 表格操作

3.8.1 表的校验

表里有些列的数据是有一定的要求的,比如说下面这个表,Score分数列,要求成绩只能是0到100,那如果有出现错误的数据,就需要校验出来。
在这里插入图片描述
首先还是导入库,并且读入文件:

import pandas as pd
students = pd.read_excel("C:/tmp/1.xlsx")

校验还是可以利用dataframe的apply方法,可以传入一个函数进去进行校验,所以先写一个校验的函数:

#传入一行数据(Series),用断言判断成绩范围,不在的话就抛出异常并打印信息。
def score_validation(row):try:assert 0 <= row.Score <= 100except:print(f"#{row.ID} student {row.Name} has an invalid score {row.Score}")

然后就利用dataFrame的apply方法来校验每一行,这里有个基本概念,就是dataframe遍历时有两个轴的方向,一个是左右一行一行扫描,一个是上下一列一列的扫描,对应的参数是 axis,如果为0就是上下一列一列扫描,如果是1就是左右一行一行扫描。这里的校验函数写的逻辑是一行一行扫描,所以参数axis为1:

students.apply(score_validation, axis=1)

这样就会找出Score有错误的数据,并打印出来。

3.8.2 分列

要把一列分成两列,比如这个例子里,要把Full Name的列,分成First Name和 Last Name两列:
在这里插入图片描述在这里插入图片描述
除了把列分开,数据也要根据自己的格式来进行分离,比如这里名和姓都是用空格分开的。

首先依然导入库和读入文件:

import pandas as pd
employees = pd.read_excel("C:/tmp/1.xlsx", index_col='ID')

先准备一个中间结果

#这里dataFrame获得该列的Series并用string的分割方法来完成两列数据的分割
#split通过空格来分割,expand设为True,最后就只保留我们想要的两个list
df = employees["Full Name"].str.split(' ', expand=True)
#然后添加新的两列就是:
employees['First Name'] = df[0]
employees['Last Name'] = df[1]

3.8.3 统计分析

经常会遇到求一些基本的统计分析数据,比如总和、均值等,现在例子是学生的3次测试成绩:
在这里插入图片描述
首先依然导入库和读入文件:

import pandas as pd
students= pd.read_excel("C:/tmp/1.xlsx", index_col='ID')

现在需要计算Test这3列的数据,不要其他列,那就得先拿这个表的一个子集来继续操作:

#students['Test_1']这样是拿到一列数据,即Series,
#里面放个list,就是拿到多列数据,还是dataFrame
#所以这样的方式就拿到了一个子集temp
temp = students[['Test_1', 'Test_2', 'Test_3']]

然后,就是在这个子集表的上面进行各种数据统计

#这样调用,是按列累加总和,result最终是个Series,分别对应3列的总和的值
result = temp.sum()

而我们现在是想得到一个学生的3次测试成绩,得横着加,那么上上一节说过,左右横着一行一行扫描,得设轴axis为1,所以:

#加上axis参数并设为1,这样就是一行这3列的总和了
row_sum = temp.sum(axis=1)
#求这一行的平均值,就换个函数
row_mean = temp.mean(axis=1)
#以此类推,其他统计方法都可以调用具体的函数,插pandas文档都能找到,搜一下也行。

3.8.4 消除重复数据

这个场景也经常出现,比如这个数据里Name里最后有重复的名字,现在想去掉重复的行。
在这里插入图片描述
首先依然导入库和读入文件:

import pandas as pd
students= pd.read_excel("C:/tmp/1.xlsx", index_col='ID')

去重复,也有现成函数调用

#去掉Name列重复的行
students.drop_duplicates(subset='Name', inplace=True, keep='first')

如果要对多行去重,就在subset参数里给一个list就行。
keep参数意思是重复的数据,要保留第1次出现还是最后一次出现的,可以设first,或者last

如果只是想找到重复的数据,而不删除,那就换个方法:

dupe = students.dublicated(subset='Name')

此时dupe变量的值代表每行是不是有重复,有重复的行就是True,没有的行就是False,长这样,最后5行和前面有重复,就变成了True。

>>> students.duplicated()
0    False
1    False
2    False
... ...
19   True
20   True
21   True
22   True
23   True
dtype: bool

只是判断一下有没有重复数据,就调用这个

#any函数
print(dupe.any())

如果想过滤一下,只要重复的数据就是:

dupe = dupe[dupe == True] #可以简写为  dupe = dupe[dupe] ,但是读起来不好理解
#然后就可以定位到重复的数据
students.iloc[dupe.index]

3.8.5 旋转行列

想把一个表的行列旋转一下,行变列,列变行。
首先依然导入库和读入文件:

import pandas as pd
students= pd.read_excel("C:/tmp/1.xlsx", index_col='ID')

这里读的时候一定要设置一下index,不然会自动加一列index,导致旋转的时候多了一行。

#旋转就调用一个函数就可以了
table = students.transpose()

3.8.6 导入csv、tsv和txt文件

1、读csv文件
csv文件的读入pandas有函数可以直接用:

students1 = pd.read_csv("C:/tmp/1.csv", index_col='ID')

2、读tsv文件
tsv文件没有专门的函数,还是用csv的函数,只不过可以自定义数据分隔符就能读了,tsv文件的数据分隔符是制表符:

students2 = pd.read_csv("C:/tmp/2.tsv", sep='\t', index_col='ID')

3、读txt文件
txt文件还是用csv的函数,还是用自定义分隔符,一般分隔符用 | 字符:

students3 = pd.read_csv("C:/tmp/3.txt", sep='|', index_col='ID')

好,先学到这,后面继续学习其他操作

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/197482.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Swift 常用关键字

目录 一、数据类型 1. 流程控制 2. 访问控制 3. 功能修饰词 4. 错误处理 5. 泛型和类型 6. 其它关键字 二、部分关键字说明 1. guard 2. class 和 struct struct&#xff08;结构体&#xff09; class&#xff08;类&#xff09; 使用场景 3. mutating 4. proto…

【算法专题】前缀和

前缀和 前缀和1. 前缀和【模板】2. 二维前缀和【模板】3. 寻找数组的中心下标4. 除自身以外数组的乘积5. 和为K的子数组6. 和可被K整除的子数组7. 连续数组8. 矩阵区域和 前缀和 1. 前缀和【模板】 题目链接 -> Nowcoder -DP34.前缀和【模板】 Nowcoder -DP34.前缀和【模…

nodejs微信小程序+python+PHP天天网站书城管理系统的设计与实现-计算机毕业设计推荐

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性&#xff1a;…

matlab实践(九):分段线性插值与三次样条插值

题目 用matlab对572所在区间分别进行分段线性插值、三次样条插值&#xff0c;计算出151&#xff0c;159&#xff0c;984&#xff0c;995的对数值&#xff0c;画出图形并在图形上用红色圆圈标记151&#xff0c;159&#xff0c;984&#xff0c;995所在的点,同时在图形中显示这些…

Java Socket编程之基于TCP协议通信

1.说明 Socket&#xff08;套接字&#xff09;是计算机网络编程中用于实现网络通信的一种编程接口或抽象概念。 它提供了一种标准的接口&#xff0c;使应用程序能够通过网络与其他计算机进行通信。 Socket可以看作是应用程序与网络之间的一个通信端点&#xff0c;类似于电话中…

如何在 Chrome 上调试文件打断点

1. 控制台进入 Source 2. CtrlP 输入文件名称 3. 在需要的位置手动打断点 4. 重新触发代码运行&#xff0c;触发断点

分享 | 顶刊高质量论文插图配色(含RGB值及16进制HEX码)(第一期)

我在很早之前出过一期高质量论文绘图配色&#xff0c;但当时觉得搜集太麻烦于是就没继续做&#xff0c;后来用MATLAB爬了上万张顶刊绘图&#xff0c;于是又想起来做这么一个系列&#xff0c;拿了一个多小时写了个提取论文图片颜色并得出RGB值和16进制码并标注在原图的代码&…

简单了解传输层协议之TCP和UDP

目录 一、什么是端口号? 二、TCP协议 2.1 TCP报文格式 2.2 三次握手 2.3 四次挥手 2.4 窗口流量控制 三、UDP协议 3.1 UDP报文格式 3.4 传输过程 一、什么是端口号? 我们自己的一台电脑上有时可能会同时运行多个进程软件来进行上网。那么当网络上的服务器响应我们电…

Chrome清除特定网站的Cookie,从而让网址能正常运行(例如GPT)

Chrome在使用某些网址的时候&#xff0c;例如GPT的时候&#xff0c;可能会出现无法访问这个网址的情况&#xff0c;就是点不动啥的 只需要把你需要重置的网址删除就好了

C语言小游戏:三子棋

目录 &#x1f30d;前言 &#x1f685;目录设计 &#x1f48e;游戏逻辑设置 ⚔三子棋棋盘设计 ⚔三子棋运行逻辑 &#x1f440;怎么设置人下棋 &#x1f440;怎么设置电脑下棋 ✈如何判断输赢 ✍结语 &#x1f30d;前言 Hello,csdn的各位小伙伴你们好啊!这次小赵给大…

根据源码梳理Redisson的可重入、锁重试以及看门狗机制原理

Redisson可重入的原理 在上篇文章中我们已经知道了除了需要存储线程标识外&#xff0c;会额外存储一个锁重入次数。那么接下来我们查看使用Redisson时&#xff0c;Redisson的加锁与释放锁流程图。 当开始获取锁时&#xff0c;会先判断锁是否存在&#xff0c;如果存在再进行判断…

算法通关村第十六关-黄金挑战滑动窗口与堆的结合

大家好我是苏麟 , 今天带来一道小题 . 滑动窗口最大值 描述 : 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 题目 : …

EM32DX-C4【C#】

1外观&#xff1a; J301 直流 24V 电源输入 CAN0 CAN0 总线接口 CAN1 CAN1 总线接口 J201 IO 接线段子 S301-1、S301-2 输出口初始电平拨码设置 S301-3~S301-6 模块 CAN ID 站号拨码开关 S301-7 模块波特率拨码设置 S301-8 终端电阻选择开关 2DI&#xff1a; 公共端是…

XUbuntu22.04之OBS30.0设置录制音频降噪(一百九十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

LLM之Agent(三):HuggingGPT根据用户需求自动调用Huggingface合适的模型

​ 浙大和微软亚洲研究院开源的HuggingGPT&#xff0c;又名JARVIS&#xff0c;它可以根据用户的自然语言描述的需求就可以自动分析需要哪些AI模型&#xff0c;然后去Huggingface上直接调用对应的模型&#xff0c;最终给出用户的解决方案。 一、HuggingGPT的工作流程 它的…

Linux驱动开发学习笔记3《新字符设备驱动实验》

目录 一、新字符设备驱动原理 1.分配和释放设备号 2.新的字符设备注册方法 &#xff08;1&#xff09; 字符设备结构 &#xff08;2&#xff09;cdev_init函数 &#xff08;3&#xff09; cdev_add函数 &#xff08;4&#xff09;cdev_del 函数 二、自动创建设备节点 …

网络安全(二)-- Linux 基本安全防护技术

4.1. 概述 安全防护基础主要是会用Linux系统&#xff0c; 熟悉Linux基本操作命令。 在这个章节中&#xff0c;我们主要探讨自主访问控制&#xff08;许可位、ACL&#xff09;、文件属性、 PAM技术、能力机制等。 4.1.1. 补充命令 本章节中&#xff0c;涉及一些新的命令&#…

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

这里写自定义目录标题 一、什么是STL二、STL的版本1. 原始版本2. P. J. 版本3. RW版本★ 4. SGI版本 三、STL的六大组件四、STL的重要性五、如何学习STL六、STL的缺陷 一、什么是STL STL ( standard template libaray - 标准模板库 )&#xff1a;是C标准库 的重要组成部分&…

红队攻防之隐匿真实IP

0x01 前言 安全态势日益严峻&#xff0c;各大组织普遍采用了综合的安全产品&#xff0c;如态势感知系统、WAF和硬件防火墙等&#xff0c;这些措施加大了渗透测试和攻防演练的难度。即使是一些基本的漏洞验证、端口扫描&#xff0c;也可能导致测试IP被限制&#xff0c;从而阻碍…

DFT新手教程:VASP中ISIF取值设置

新手初学VASP计算时首先接触到的就是结构优化的计算任务。 在结构优化中&#xff0c;INCAR中的关键参数包括 IBRION &#xff0c;NSW&#xff0c;ISIF&#xff0c;EDIFF和EDIFFG 各个参数均可在vaspwiki查到可设置的参数以及该参数所具有的设置的含义。 https://www.vasp.at/…