【Pandas】基础操作

📝本文介绍
本文为作者观看pandas入门课后整理的基础操作笔记

👋作者简介:一个正在积极探索的本科生
📱联系方式:943641266(QQ)
🚪Github地址:https://github.com/sankexilianhua
🔑Gitee地址:https://gitee.com/Java_Ryson
由于本人的知识所限,如果文章有问题,欢迎大家联系并指出,博主会在第一时间修正。

文章目录

  • 📕前言
  • 📘1. 读取与写入表格
    • 📖1.1 读取文件
    • 📖1.2 数据类型
  • 📙2. DataFrame数据选择
    • 📖2.1 选择列
    • 📖2.2 数据筛选
  • 📗3. 创建图表
  • 📕4. 创建新列
    • 📖4.1 创建新的一列
    • 📖4.2 更改列标签名
  • 📘 5. 统计
    • 📖5.1 求平均值,中位数等
    • 📖5.2 分组统计
  • 📙6. 重塑表格布局
    • 📖6.1 排序
    • 📖6.2 透视表
    • 📖6.3 列变行
  • 📗7. 合并表
    • 📖7.1 拼接表 concat
    • 📖7.2 使用共有/相似列连接 merge
  • 📕8. 时间序列数据处理
    • 📖8.1 文本数据转为时间对象
    • 📖8.2 重采样
  • 📘9. 文本数据操作

📕前言

Pandas处理的是dataframe的数据。datafram可以理解为键值对,一个键(列名)和其对应底下的多个值的二维数组.

练手数据集:vincentarelbundock.github.io/Rdatasets/datasets.html

本次所使用的数据集为第一个数据集。(并不会全文都使用)

📘1. 读取与写入表格

📖1.1 读取文件

(1)打开CSV文件:变量名 = pd.read_csv(”路径/文件.csv“)

  • 路径使用左斜杠/
  • (若使用右斜杠)路径前加一个r来表示不要转义
  • (若使用右斜杠)可以使用两个右斜杠来表示\

(2)存储Excel文件:变量名.to_excel(“文件名.xlsx”,sheet_name=”passengers“,index=False)

  • 通过设置行索引标签不会保存在电子表格中
  • 除文件名外,都是可选项

(3)打开excel文件:变量名 = pd.read_excel(”路径/文件.xslx“,sheetname=”passengers“)

  • sheetname是可选项

📖1.2 数据类型

  • 使用type(变量)来查看变量对应的数据类型。最常用的数据类型即为:pandas.core.frame.dataframe

  • 使用 变量.dtypes可以查看其中每一列名对应的数据类型

  • 使用 变量.info可以查看更详细的信息

  • 使用head()方法可以选择查看前几行

  • 使用tail()方法可以选择查看倒数几行

📙2. DataFrame数据选择

📖2.1 选择列

#选择单列
age = affairs['age']; #可以选出对应的列的值来,此时的数据类型为pandas.core.series.Series
age.shape	#是一个一维数据#选择多列
gender_age = affairs[['gender','age']] #取出对应的两列数值来
gender_age.shape #是一个二维数据gender_age_children = affairs[['gender','age','children']] #取出对应的三列数值来
gender_age.shape #是一个三维数据

📖2.2 数据筛选

一个表的变量创建之后,对于数据的筛选可以这样理解:[]中包含了所要筛选的条件。如果是一个列名,那么筛选出来的是一列。如果是一个或多个不等式,则可以表示去掉不符合条件的数据。

单条件选择

例:筛选出23岁以上的数据

age_above23 = affairs[affairs['age']>23]# 这里[]里面将age拿出来后进行判断,是否大于23

多条件

筛选出23岁以上45岁以下的数据

age_above23_below45 = affairs[(affairs['age']>23)&(affairs['age']<45)]#注意:多条件时,每一个条件要使用()括起来,条件中间使用& | !等符号来连接

筛选出无缺失值的数据

age_no_na = affairs[affairs['age'].notna()]# 使用.notna()可以判断该列对应的数值中是否有缺失值的行存在

复合型

age_above23 = affairs[affairs['age']>23]['gender']#通过单条件的方式筛选出年龄大于23的数据,再从这些数据中只取性别那一列

可以复合多种筛选方式,来筛选出自己想要的方式。

切片

即筛选出数据中的某些行,列。如:10-25行,2-3列

affair = affairs.iloc[9:25,1:3]#取出第10行到第25行,第2列到3列的数据
iloc[行,列]

📗3. 创建图表

创建图表时,除了使用pandas还需要使用到matplotlib.pyplot

import pandas
import matplotlib.pyplot
air_quality.plot() #默认为line方法 
air_quality.plot.area(figsize= (12,4),subplots=True)
plot.show()

plot方法可以实现对数据快速可视化。

  • 它也适用于Serial类变量,也就是可以单独对列变量进行可视化

  • 默认每一列单独作为不同元素绘制

  • plot中有多种图可以实现,包括line,scatter,box等等。

  • area方法可以将每列的变量单独做一个图。

  • pandas创建的任何绘图对象,都是一个matplotlib对象

📕4. 创建新列

📖4.1 创建新的一列

affairs["新列"] = affais["age"]*2#创建新列直接写即可,但创建完之后需要赋值,后面的赋值可以是表达式也可以是一个简单的值
#其会默认加再DataFrame原数据的最后一列

📖4.2 更改列标签名

特定列标签名更改

affairs_renamed = affairs.rename(columns={"age":"年龄""gender":"性别"}
)# 在columns中使用字典的方式将想要改变的列名更改。
# 即:“原列名”:“新列名”

📘 5. 统计

📖5.1 求平均值,中位数等

  • 求单列的平均值:affairs[“列名”].mean()

  • 求多列的平均值:affairs[“列名1”,“列名2”].mean()

  • 聚合统计信息:describe()

    显示的数据包含:总数,平均值,标准差,最小值,25%,50%,75%,max

函数作用
mean()求平均值
sum()求和
count()计数
median()求中位数
quantile()求分位数
max()/min()求最大/小值
var()/std()求方差/标准差

agg函数可以对数据进行聚合处理,可以一次性对多个数据的统计

titanic.agg({"Age": ["min","max","median","skew"],"Fare": ["min","max","median","mean"]}
)

📖5.2 分组统计

单分组

例:

affairs[['age','gender']].groupby("gender").mean()
affairs.groupby("gender")["age"].mean()#两种方法都可以求得:按性别分组的年龄平均值

多分组

例:

affairs.groupby(["gender","education"])["age"].mean()affairs.groupby(["gender","education"])["age"].count()#先通过gender来分组,再通过education来分组,分完组后,求各个组的年龄的平均值/总数

📙6. 重塑表格布局

📖6.1 排序

索引排列:sort_index()

值排列:sort_values(by=“列名”)

  • 默认为升序排列
  • 多排序参数时,需要使用[]将参数括起来
titanic.sort_values(by="Age").head()#降序排列,需要在参数中将ascending=False
titanic.sort_values(by="Age", ascending=False).head()#多参数
titanic.sort_values(by=["Pclass","Age"], ascending=False).head()

📖6.2 透视表

可以理解为:取出数据创建自己子集

pivot和pivot_table

DataFrame.pivot_table(data,values=None,index=None,columns=None,aggfunc='mean',fill_value=None,margins=False,dropna=True,margins_name='All',observed=False,sort=True)data -- DataFrame格式数据
values -- 需要汇总计算的列,多个需要使用[]括起来
index -- 行分组键,多个需要使用[]括起来
columns -- 列分组键,多个需要使用[]括起来
aggfunc -- 聚合函数,或函数列表,默认为平均值
fill_value -- 缺失值填充,默认值填充
margins -- 是否添加行列的总计
dropna -- 如果列的值都为NaN则不计算
margins_name -- 汇总行列名称
observed -- 是否显示观测值

pivot()函数,取出图集中的部分数据,并将其绘制成子表

Pandas.pivot(data, index=None, columns=None, values=None)no2_subset.pivot(columns="location", values="value")#此时,新表的列名将会使用location中的类别
#每个列对应下来的值是原表中value列的值

注意:pandas.pivot 的重点在于 reshape, 合并同类项,所以在行与列的交叉点值的索引应该是唯一值,如果不是唯一,则会报错

reset_index()可以实现对数据行标签的重新设定

📖6.3 列变行

melt函数默认情况下会将所有其他列(除了 id_vars 中指定的列)转换为行。

df_wide.melt( id_vars=[], #要保留的列value_vars=[], #需要被转换的列名var_name='', #自定义设置对应的列名value_name='' #自定义设置对应的列名
)

melt是pivot的反向

📗7. 合并表

📖7.1 拼接表 concat

使用concat可以沿着一个轴方向将两个表拼接起来,默认情况下是沿着行垂直向下方向,这就要求两个表要有相似的结构

concat([表1,表2,...],axis=0/1)轴axis0沿着行垂直向下方向
轴axis1沿着列水平方向

其还有level,key,names参数

实例数据:

df1 = pd.DataFrame({'sales': [100, 200, 300], 'month': ['January', 'February', 'March']})
df2 = pd.DataFrame({'profits': [10, 20, 30], 'month': ['January', 'February', 'March']})
  • ‘levels’ 参数是指在合并多个 DataFrame 时,指定它们的 MultiIndex 层级。具体来说,如果您要将两个具有相同的 MultiIndex 层的DataFrame 进行合并,则需要指定 ‘levels’ 参数。

    如:

    df_concat = pd.concat([df1, df2], levels=['month'], sort=False)
    合并完后:sales  profits
    month                 
    January    100       10
    February   200       20
    March      300       30
    
  • ‘keys’ 参数可以用于向合并后的 DataFrame 添加一层 MultiIndex。当合并多个 DataFrame 时,’keys’ 参数用于识别每个 DataFrame 的来源。

    df_concat = pd.concat([df1, df2], keys=['2018', '2019'], sort=False)sales    month
    2018 0    100  January1    200  February2    300    March
    2019 0    500  January1    600  February2    700    March
    
  • ‘names’ 参数用于为 MultiIndex 层级命名。具体来说,’names’ 参数可以为 ‘levels’ 参数中指定的每个层级命名,也可以为使用 ‘keys’ 参数添加的每个层级命名。

    df_concat = pd.concat([df1, df2], keys=['sales', 'profits'], levels=[['sales', 'profits'], ['month']], names=['indicator', 'period'], sort=False)sales  profits
    indicator period                   
    sales     January      100      NaNFebruary     200      NaNMarch        300      NaN
    profits   January      NaN     10.0February     NaN     20.0March        NaN     30.0

📖7.2 使用共有/相似列连接 merge

merge,使用公共标识符连接表。

在有两个表的情况下:

使用两个表共有的列来连接两个表

merge([表1,表2,...],how="",on="")#how有left和right,即左连接和右连接,按左/右标签作为标准,右/左边有的才能连接
#on则是使用哪个共同列

使用两个表相似列来连接(列名可能不同)

merge([表1,表2,...],how="",left_on="",right_on=“”)#how有left和right,即左连接和右连接,按左/右标签作为标准,右/左边有的才能连接
#left_on、right_on是指使用两个表各自的哪个列来合并(列名可能不同)

📕8. 时间序列数据处理

📖8.1 文本数据转为时间对象

pd.to_datatime()可以将数据表中的某一列对应转成时间对象

air_quality["datatime"]=pd.to_datatime(air_quality["datatime"])
  • 转换成时间对象之后,可以使用对应的时间函数,最大值,最小值,排序等等。

  • 计算两者相差多少小时时,可以直接进行加减运算。

  • 通过.dt.month/year/day等可以直接获得年月日信息,通过weekday可以直接分出每个数据是星期几。这些都需要通过dt来访问

  • 转为时间对象之后,可以直接使用时间来进行切片

    no_2["2019-05-20":"2019-05-21"]
    

📖8.2 重采样

resample()函数可以将时间序列重采样到另一个频率(如:将秒级数据转换为5分钟数据)

使用方法类似与groupby

  • 通过使用一个字符串,如M,SH等来定义目标频率
  • 需要一个聚合函数

📘9. 文本数据操作

str访问器中有很多专门用于字符串的方法。

  • 将所有姓名转换成小写:str.lower()
  • 分割:str.split()
  • 获取:str.get()
  • 是否包含:str.contains(),该函数支持正则表达式
  • 长度:str.len()
  • 替换:str.replace()

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

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

相关文章

【react使用AES对称加密的实现】

react使用AES对称加密的实现 前言使用CryptoJS库密钥存放加密方法解密方法结语 前言 项目中要求敏感信息怕被抓包泄密必须进行加密传输处理&#xff0c;普通的md5加密虽然能解决传输问题&#xff0c;但是项目中有权限的用户是需要查看数据进行查询的&#xff0c;所以就不能直接…

【STM32】INA3221三通道电压电流采集模块,HAL库

一、简单介绍 芯片的datasheet地址&#xff1a; INA3221 三通道、高侧测量、分流和总线电压监视器&#xff0c;具有兼容 I2C 和 SMBUS 的接口 datasheet (Rev. B) 笔者所使用的INA3221是淘宝买的模块 原理图 模块的三个通道的电压都是一样&#xff0c;都是POWER。这个芯片采用…

《机器人SLAM导航核心技术与实战》第1季:第10章_其他SLAM系统

视频讲解 【第1季】10.第10章_其他SLAM系统-视频讲解 【第1季】10.1.第10章_其他SLAM系统_RTABMAP算法-视频讲解 【第1季】10.2.第10章_其他SLAM系统_VINS算法-视频讲解 【第1季】10.3.第10章_其他SLAM系统_机器学习与SLAM-视频讲解 第1季&#xff1a;第10章_其他SLAM系统 …

《HelloGitHub》第 103 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…

【OJ题解】C++实现反转字符串中的每个单词

&#x1f4b5;个人主页: 起名字真南 &#x1f4b5;个人专栏:【数据结构初阶】 【C语言】 【C】 【OJ题解】 题目要求&#xff1a;给定一个字符串 s &#xff0c;你需要反转字符串中每个单词的字符顺序&#xff0c;同时仍保留空格和单词的初始顺序。 题目链接: 反转字符串中的所…

Oracle OCP认证考试考点详解082系列09

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 41. 第41题&#xff1a; 题目 41.Examine the description of the EMPLOYEES table NLS_DATE_FORMAT is set to DD-MON-YY Which query…

创建线程时传递参数给线程

在C中&#xff0c;可以使用 std::thread 来创建和管理线程&#xff0c;同时可以通过几种方式将参数传递给线程函数。这些方法包括使用值传递、引用传递和指针传递。下面将对这些方法进行详细讲解并给出相应的代码示例。 1. 值传递参数 当你创建线程并希望传递参数时&#xff…

Linux下cgdb/gdb调试以及关于操作系统那些事

目录 一.gdb调试 1.1debug和release版本有什么区别? 1.2性能优化 1.3gdb的使用 1.4cgdb的安装 二.什么是硬件 三.冯诺依曼体系 四.操作系统(OS) 4.1理解操作系统 4.1.1操作系统是什么? 4.1.2为什么要有操作系统? 4.1.3 OS-银行 4.1.4OS如何管理 理解库文件和系…

Kafka相关知识点(上)

为什么要使用消息队列&#xff1f; 使用消息队列的主要目的主要记住这几个关键词:解耦、异步、削峰填谷。 解耦: 在一个复杂的系统中&#xff0c;不同的模块或服务之间可能需要相互依赖&#xff0c;如果直接使用函数调用或者 API 调用的方式&#xff0c;会造成模块之间的耦合…

ureport配置方法

1、项目启动后登录这个网址&#xff0c;ip和端口自己系统的 http://localhost:8080/ureport/designer 点击这个地方&#xff0c;图标类似一个文件夹选择下图标注的两个文件&#xff0c;这两个文件就是eoa系统要用到的报表文件&#xff0c;还是点击类似文件夹图标的图标 正在上…

在Linux上搭建Minecraft服务器的方法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 在 Linux&#xff08;Ubuntu 12.04&#xff09;上设置 Minecraft 服务器是一个相当简单的任务&#xff0c;只需通过命令行即可完成。 在…

/检测是否json格式参数;对现在 上月时间参数;JS判断数组(数组对象)是否发现变化;js判断对象是否是空对象

//检测是否json格式参数 isValidJSON(str) { if (/^[\],:{}\s]*$/.test(str.replace(/\\["\\\/bfnrtu]/g, ). replace(/"[^"\\\n\r]*"|true|false|null|-?\d (?:\.\d*)?(?:[eE][ \-]?\d )?/g, ]). replace(/(?:^|:|,)(?:\s*\[) /g, ))) { return t…

Java学习路线:JUnit单元测试

目录 使用JUnit 导入依赖 使用Junit 添加前置/后置操作 当项目十分庞大时&#xff0c;如果想测试一个很小的功能&#xff0c;都要启动整个项目来测试&#xff0c;会很浪费时间。 那能否将某个小功能单独拆出来进行测试呢&#xff1f; 这就是单元测试的作用。而JUnit就是一…

RK3568平台(camera篇)车载摄像头串行器和解串器方案

一.串行器和解串器简介 SerDes是Serializer/Deserializer的缩写,即串行器和解串器。由于同轴线的传输延迟几乎可以忽略不计(ns级别),相当于将原来只能短距离传输的高速并行信号(MIPI/I2C/CLK等)的传输距离延长,真正做到高带宽、低延迟、长距离的数据传输。 串行器(Seri…

问:Redis为什么这么快?

Redis&#xff0c;全称Remote Dictionary Server&#xff0c;是一个开源的高性能键值对数据库。它以其卓越的性能、丰富的数据结构和灵活的使用方式&#xff0c;在现代互联网应用中扮演着重要角色。本文将探讨Redis之所以快的原因&#xff0c;包括其数据结构、内存管理、IO多路…

Qt 窗口部件的焦点策略

setFocusPolicy 函数是 Qt 框架中的一个成员函数&#xff0c;用于设置窗口部件&#xff08;widget&#xff09;的焦点策略&#xff08;focus policy&#xff09;。具体来说&#xff0c;Qt中的焦点策略&#xff08;Qt::FocusPolicy&#xff09;决定了控件是否可以通过键盘&#…

【A】【Maven项目热部署】将Maven项目热部署到远程tomcat服务器上

将Maven项目热部署到远程tomcat中 文章目录 将Maven项目热部署到远程tomcat中1.解决方案&#xff1a;2.实现3.Tomcat中的Root项目的配置和使用4.在tomcat-user.xml中配置远程服务器tomcat的账户信息5.修改 IP 访问权限6.登录ROOT项目&#xff0c;使用Manager App功能管理tomcat…

Scrum价值观

五大价值观 尊重&#xff0c;勇气&#xff0c;专注&#xff0c;承诺&#xff0c;开放 三大支柱&#xff08;经验主义的三大支柱&#xff09; 透明度&#xff0c;检查&#xff0c;适应 三大职责&#xff08;不是三大角色&#xff09; 产品负责人&#xff0c;开发人员&#xff0c…

过渡,2D,3D 转换

## 3D 转换 ### 1、旋转&#xff1a;rotateX、rotateY、rotateZ javascript transform: rotateX(360deg); //绕 X 轴旋转360度 transform: rotateY(360deg); //绕 Y 轴旋转360度 transform: rotateZ(360deg); //绕 Z 轴旋转360度 1. rotateY 举例&#xff1a; html…

【机器学习】26. 聚类评估方法

聚类评估方法 1. Unsupervised Measure1.1. Method 1: measure cohesion and separationSilhouette coefficient Method 2&#xff1a;Correlation between two similarity matricesMethod 3&#xff1a;Visual Inspection of similarity matrix 2. Supervised measures3. 决定…