Pandas理论与实战(一)

news2024/11/16 1:58:49

目录

一、Series对象

 1.1 认识Series对象

1.2 Series对象的索引

 1.3 获取Series的索引和值

二、DataFrame对象

2.1 认识DataFrame对象

2.2 DataFrame重要属性和函数

​三、导入外部数据

3.1 导入.xls或.xlsx文件

 3.2 导入csv文件

3.3 导入.txt文本文件

 3.4 导入HTML网页


Pandas是数据分析三大剑客之一,是Python的核心数据分析库,它提供了快速、灵活、明确的数据结构,能够简单、直观、快速地处理各种类型的数据。Pandas提供的两个主要数据结构Series(一维数组结构)与DataFrame(二维数组结构),可以处理金融、统计、社会科学、工程等领域里的大多数典型案例,并且Pandas是基于NumPy开发的,可以与其他第三方科学计算库完美集成。

一、Series对象

Pandas是Python数据分析重要的库,而Series和DataFrame是Pandas库中两个重要的对象,也是Pandas中两个重要的数据结构。

 Series是Python的Pandas库中的一种数据结构,它类似一维数组,由一组数据以及与这组数据相关的标签(即索引)组成,或者仅有一组数据没有索引也可以创建一个简单的Series。Series可以存储整数、浮点数、字符串、Python对象等多种类型的数据。

例如,在成绩表(见上图)中包含了Series对象和DataFrame对象,其中“语文”“数学”“英语”3列中的每一列均是一个Series对象,而“语文”“数学”“英语”3列组成了一个DataFrame对象,见下图

 1.1 认识Series对象

创建Series对象主要使用Pandas的Series()方法,语法如下:

s=pd.Series(data,index=index)
  • data:表示数据,支持Python字典、多维数组、标量值(即只有大小,没有方向的量。也就是说,只是一个数值,如s=pd.Series(5))
  • index:表示行标签(索引)
  • 返回值:Series对象。
  • 当data参数是多维数组时,index长度必须与data长度一致。如果没有指定index参数,则自动创建数值型索引(从0~data数据长度-1)

例如在上述成绩表中添加一列“物理”’成绩

import pandas as pd
s=pd.Series([98,56,86])
print(s)

1.2 Series对象的索引

创建Series对象时会自动生成整数索引,默认值从0开始至数据长度减1。除了使用默认索引,还可以通过index参数手动设置索引。

s1=pd.Series([98,56,86],index=['王五','赵六','小七'])
s2=pd.Series([98,67,55],index=[1,2,3])
print(s1)
print(s2)

 Series对象的位置索引是从0开始数,[0]是Series第一个数,[1]是Series第二个数

s1=pd.Series([98,56,86],index=['王五','赵六','小七'])
print(s1[1])#输出Series第二个数

 但是,需要注意Series不能使用[-1]定位索引。

Series标签索引与位置索引方法类似,用[ ]表示,里面是索引名称,注意index的数据类型是字符串,如果需要获取多个标签索引值,用[[ ]]表示(相当于[ ]中包含一个列表)。

例如,通过标签索引“王五”和“赵六”获取物理成绩,程序代码如下:

import pandas as pd
s1=pd.Series([98,56,86],index=['王五','赵六','小七'])
print(s1['王五'])#通过一个标签索引获取索引值

import pandas as pd
s1=pd.Series([98,56,86],index=['王五','赵六','小七'])
print(s1['王五'])#通过一个标签索引获取索引值
print(s1[['王五','赵六']])#通过多个标签索引获取索引值

用标签索引做切片,包头包尾(即包含索引开始位置的数据,也包含索引结束位置的数据)。例如通过标签切片索引“王五”至“赵六”获取数据。程序代码如下:

s1=pd.Series([98,56,86],index=['王五','赵六','小七'])
print(s1["王五":"赵六"])

用位置索引做切片,和list列表用法一样,包头不包尾(即包含索引开始位置的数据,不包含索引结束位置的数据)

s2=pd.Series([12,4,23,12,45,67])
print(s2[1:4])#通过位置切片1~4获取数据

 1.3 获取Series的索引和值

下面使用Series的index和values方法获取物理成绩的索引和值

s3=pd.Series([89,90,67,99])
print(s3.index)
print(s3.values)

二、DataFrame对象

DataFrame是Pandas库中的一种数据结构,它是由多种类型的列组成的二维表数据结构,类似于Excel、SQL或Series对象构成的字典。DataFrame是最常用的Pandas对象,它与Series对象一样支持多种类型的数据。

2.1 认识DataFrame对象

DataFrame是一个二维表数据结构,由行、列数据组成的表格。DataFrame既有行索引也有列索引,它可以看作是由Series对象组成的字典,不过这些Series对象共用一个索引。

 处理DataFrame表格数据时,用index表示行或用columns表示列更直观。用这种方式迭代DataFrame的列,代码更易读懂。下面遍历DataFrame数据,输出成绩表的每一列数据,程序代码如下:

data=[[110,105,99],[105,88,115],[109,120,130]]
index=[0,1,2]
columns=['语文','数学','英语']
#创建DataFrame
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)
#遍历DataFrame数据的每一列
for col in df.columns:
    series=df[col]
    print(series)

 创建DataFrame主要使用Pandas的DataFrame()方法,语法如下:

pandas.DataFrame(data,index,columns,dtype,copy)
  • data:表示数据,可以是ndarray数组、Series对象、列表、字典等。
  • index:表示行标签(索引)。
  • columns:列标签(索引)。
  • dtype:每一列数据的数据类型,其与Python数据类型有所不同,如object数据类型对应的是Python的字符型。下表为Pandas数据类型与Python数据类型的对应表。
  • copy:用于复制数据。
  • 返回值:DataFrame

下面通过两种方法来创建DataFrame,即通过二维数组创建和通过字典创建。

(1)通过二维数组创建成绩表,包括语文、数学和英语,程序代码如下: 

pd.set_option('display.unicode.east_asian_width',True)
data=[[110,105,99],[105,88,115],[109,120,130]]
index=[0,1,2]
columns=['语文','数学','英语']
#创建DataFrame
df=pd.DataFrame(data=data,index=index,columns=columns)
print(df)

 (2)通过字典创建DataFrame

通过字典创建DataFrame,需要注意:字典中的value值只能是一维数组或单个的简单数据类型,如果是数组,要求所有数组长度一致;如果是单个数据,则每行都添加相同数据。

通过字典创建成绩表,包括语文、数学、英语和班级,程序代码如下:

pd.set_option('display.unicode.east_asian_width',True)
df=pd.DataFrame({
    '语文':[110,105,99],
    '数学':[105,88,115],
    '英语':[109,120,130],
    '班级':"高二一班"
},index=[0,1,2])
print(df)

 上述代码中,“班级”的value值是一个单个数据,所以每一行都添加了相同的数据“高二一班”。

2.2 DataFrame重要属性和函数

 DataFrame是Pandas一个重要的对象,它的属性和函数很多,下面先简单了解DataFrame的几个重要属性和函数。重要属性,重要函数介绍如下表所示。

三、导入外部数据

数据分析首先就要有数据。那么,数据类型有多种,本节介绍如何导入不同类型的外部数据。

3.1 导入.xls或.xlsx文件

导入.xls或.xlsx文件主要使用Pandas的read_excel()方法,语法如下:

pandas.read_excel(io,sheet_name=0,header=0,names=None,index_col=None,usecols=None,squeeze=False,
dtype=None,engine=None,converters=None,true_values=None,false_values=None,skiprows=None,nrow=None,
na_values=None,keep_default_na=True,verbose=False,parse_dates=False,date_parser=None,thousands=None,
comment=None,skipfooter=0,conver_float=True,mangle_dupe_cols=True,**kwds)

 io:字符串,.xls或.xlsx文件路径或类文件对象

sheet_name:None、字符串、整数、字符串列表或整数列表,默认值为0。字符串用于工作表名称,整数为索引表示工作表位置,字符串列表或整数列表用于请求多个工作表,为None时获取所有工作表。参数值如下表

  • header:指定作为列名的行,默认值为0,即取第一行的值为列名。数据为除列名以外的数据;若数据不包含列名,则设置header=None
  • names:默认值为None,要使用的列名列表
  • index_col:指定列为索引列,默认值为None,索引0是DataFrame的行标签
  • usecols:int、list列表或字符串,默认值为None。如果为None,则解析所有列。如果为int,则解析最后一列。如果为list列表,则解析列号列表的列。如果为字符串,则表示以逗号分隔的Excel列字母和列范围列表(例如“A:E”或“A,C,E:F”)。范围包括双方
  • squeeze:布尔值,默认值为False,如果解析的数据只包含一列,则返回一个Series
  • dtype:列的数据类型名称或字典,默认值为None。例如{'a':np.float64,'b':np.int32}
  • skiprows:省略指定行数的数据,从第一行开始。
  • skipfooter:省略指定行数的数据,从尾部数的行开始

 (1) 常规导入

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\12\1月.xlsx")
print(df.head())

 导入外部数据,必然要涉及路径问题,下面来了解一下相对路径和绝对路径。

  • 相对路径:相对路径就是以当前文件为基准进行一级级目录指向被引用的资源文件。以下是常用的表示当前目录和当前目录的父级目录的标识符。

../:表示当前文件所在目录的上一级目录

./:表示当前文件所在的目录(可以省略)

/:表示当前文件的根目录(域名映射或硬盘目录)

如果使用系统默认文件路径\,那么,在Python中则需要在路径最前面加一个r,以避免路径里面的\被转义。

  • 绝对路径:绝对路径是文件真正存在的路径,是指从硬盘的根目录(盘符)开始,进行一级级目录指向文件。

(2)导入指定的Sheet页

一个Excel文件包含多个Sheet页,通过设置sheet_name参数就可以导入指定Sheet页的数据。

一个Excel文件包含多家店铺的销售数据,导入其中一家店铺(莫寒)的销售数据,如下图所示:

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\13\1月.xlsx",sheet_name='莫寒')
print(df.head())

 除了指定Sheet页的名字,还可以指定Sheet页的顺序,从0开始。例如,sheet_name=0表示导入第一个Sheet页的数据,sheet_name=1表示导入第二个Sheet页的数据,以此类推。如果不指定sheet_name参数,则默认导入第一个Sheet页的数据。

(3)通过行、列索引导入指定行、列数据

DataFrame是二维数据结构,因此它既有行索引又有列索引。当导入Excel数据时,行索引会自动生成,如0、1、2;而列索引则默认将第0行作为列索引(如A,B,…,J)。DataFrame行、列索引的示意图如下图所示。

如果通过指定行索引导入Excel数据,则需要设置index_col参数。下面将“买家会员名”作为行索引(位于第0列),导入Excel数据,程序代码如下

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\14\1月.xlsx",index_col=0)
print(df.head())

 如果通过指定列索引导入Excel数据,则需要设置header参数,主要代码如下:

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\14\1月.xlsx",header=1)
#设置第一行为列索引
print(df.head())

如果将数字作为列索引,可以设置header参数为None,主要代码如下:

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\14\1月.xlsx",header=None)
#设置列索引为数字
print(df.head())

  那么,为什么要指定索引呢?因为通过索引可以快速地检索数据,例如df3[0],就可以快速检索到“买家会员名”这一列数据。

(4)导入指定列数据

一个Excel往往包含多列数据,如果只需要其中的几列,可以通过usecols参数指定需要的列,从0开始(表示第1列,以此类推)。

例如导入第一列数据(索引为0):

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\15\1月.xlsx",usecols=[0])
#导入第一列
print(df.head())

 如果导入多列,可以在列表中指定多个值。例如,导入第1列和第4列,主要代码如下:

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\15\1月.xlsx",usecols=[0,3])
#导入第一列
print(df.head())

 也可以指定列名称,主要代码如下:

df=pd.read_excel(r"C:\Users\zex\Desktop\MR\Code\03\15\1月.xlsx",usecols=['买家会员名','宝贝标题'])
#导入第一列
print(df.head())

 3.2 导入csv文件

导入.csv文件主要使用Pandas的read_csv()方法,语法如下:

  • filepath_or_buffer:字符串,文件路径,也可以是URL链接
  • sep、delimiter:字符串,分隔符
  • header:指定作为列名的行,默认值为0,即取第1行的值为列名。数据为除列名以外的数据;若数据不包含列名,则设置header=None
  • names:默认值为None,要使用的列名列表
  •  index_col:指定列为索引列,默认值为None,索引0是DataFrame的行标签。
  • usecols:int、list列表或字符串,默认值为None。如果为None,则解析所有列。如果为int,则解析最后一列。如果为list列表,则解析列号列表的列。如果为字符串,则表示以逗号分隔的Excel列字母和列范围列表(例如“A:E”或“A,C,E:F”)。范围包括双方。
  • dtype:列的数据类型名称或字典,默认值为None。例如{'a':np.float64,'b':np.int32}
  • parse_dates:布尔类型值、int类型值的列表、列表或字典,默认值为False。可以通过parse_dates参数直接将某列转换成datetime64日期类型。例如,df1=pd.read_csv('1月.csv', parse_dates=['订单付款时间'])。parse_dates为True时,尝试解析索引。 parse_dates为int类型值组成的列表时,如[1,2,3],则解析1、2、3列的值作为独立的日期列。parse_date为列表组成的列表,如[[1,3]],则将1、3列合并,作为一个日期列使用。parse_date为字典时,如{'总计':[1, 3]},则将1、3列合并,合并后的列名为“总计”。
  • encoding:字符串,默认值为None,文件的编码格式。Python常用的编码格式是UTF-8

例如,导入csv文件,代码如下

df=pd.read_csv(r"C:\Users\zex\Desktop\MR\Code\03\16\1月.csv",encoding="GBK")
print(df.head())

 

注意,上述代码中指定了编码格式,即encoding='gbk'。Python常用的编码格式是UTF-8和gbk,默认编码格式为UTF-8。导入.csv文件时,需要通过encoding参数指定编码格式。当将Excel文件另存为.csv文件时,默认编码格式为gbk,此时当编写代码导入.csv文件时,就需要设置编码格式为gbk,与源文件编码格式保持一致;否则会提示错误。 

3.3 导入.txt文本文件

导入.txt文件同样使用Pandas的read_csv()方法,不同的是需要指定sep参数(如制表符\t)。read_csv()方法读取.txt文件返回一个DataFrame,像表格一样的二维数据结构 

df=pd.read_csv(r"C:\Users\zex\Desktop\MR\Code\03\17\1月.txt",sep='\t',encoding="GBK")
print(df.head())

 3.4 导入HTML网页

导入HTML网页数据主要使用Pandas的read_html()方法,该方法用于导入带有table标签的网页表格数据,语法如下:

  • io:字符串,文件路径,也可以是URL链接。网址不接受https,可以尝试去掉https中的s后爬取,如http://www.mingribook.com
  • match:正则表达式,返回与正则表达式匹配的表格
  • flavor:解析器默认为lxml
  • header:指定列标题所在的行,列表list为多重索引
  • index_col:指定行标题对应的列,列表list为多重索引
  • encoding:字符串,默认为None,文件的编码格式
  • 返回值:返回一个DataFrame 

使用read_html()方法前,首先要确定网页表格是否为table类型。例如,NBA球员薪资网页(http://www.espn.com/nba/salaries),右击该网页中的表格,在弹出的快捷菜单中选择“检查元素”命令,查看代码中是否含有表格标签<table>…</table>的字样,确定后才可以使用read_html()方法。 

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

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

相关文章

Sentinel组件限流降级

官网: home | Sentinel 文档不是很全, 关于nacos的配置中心的使用完全没有 常见的限流算法 静态窗口限流: 即规定1秒内只能固定处理多少请求动态窗口限流: 同样是规定1秒内处理多少请求, 但是统计方式与第一个不同, 比如2.5秒则是统计1.5秒到现在的请求数漏桶限流: 进来可以…

【全栈第三课】通过ChatGPT快速入门NodeJS

前言 往期全栈课程&#xff1a; Vue从入门到精通 微信小程序从入门到精通 Node.js基础 简介 Node.js是什么&#xff1f; Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O的模型&#xff0c;使其轻量又高效。Node.js …

迎接高考的倒计时网页(❤️好看好用❤️)HTML+CSS+JS

✨博主&#xff1a;命运之光 &#x1f338;专栏&#xff1a;Python星辰秘典 &#x1f433;专栏&#xff1a;web开发&#xff08;简单好用又好看&#xff09; ❤️专栏&#xff1a;Java经典程序设计 ☀️博主的其他文章&#xff1a;点击进入博主的主页 前言&#xff1a;欢迎踏入…

并发编程_jmm部分

1. JMM 理解 前提&#xff1a;并发编程有3大问题&#xff0c;可见性、有序性、原子性。 导致可见性的原因是缓存&#xff0c;有序性的原因是 编译器优化。解决方法就是直接禁用缓存和编译器优化&#xff0c;导致程序性能堪忧。 因此合理的方案就是按需禁用缓存和编译器优化。 …

MySQL数据库——单表查询练习

一、练习素材 创建表 CREATE TABLE emp (empno int(4) NOT NULL,ename varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,job varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,mgr int(4) NULL DEFAULT NULL,hireda…

遗传算法核心理解,python代码

遗传算法的核心&#xff0c;就在于&#xff0c;把待求的变量转化成二进制串&#xff0c;二进制串就像dna&#xff0c;可以对它的其中某几位进行交换&#xff0c;变异等操作&#xff0c;然后再转换回十进制&#xff0c;带入目标函数&#xff0c;计算适应度&#xff0c;保留适应度…

【lambda函数】lambda()函数

lambda&#xff08;&#xff09; lambda&#xff08;&#xff09;语法捕捉列表mutable lambda 底层原理函数对象与lambda表达式 lambda&#xff08;&#xff09;语法 lambda表达式书写格式&#xff1a; [capture-list] (parameters) mutable -> return-type{ statement }咱…

【数据结构】排序:插入排序与希尔排序详解

本章开始就要分享一些常用的排序方法&#xff0c;我们的日常生活中很多地方都要使用排序&#xff0c;比如电商平台可以按照你的需求进行排序&#xff0c;或者是你想了解大学的综合排名时 我们之前也学到过一些简单的排序比如冒泡排序&#xff0c;虽然他在时间复杂度上可以说是依…

归并排序(思路+代码)

变量&#xff1a; left、right、privot、temp[]、leftIndex、k 思路&#xff1a; 代码&#xff1a; import java.util.Arrays;public class Queue8 {public static void main(String[] args) {int[] arr {8, 9, 1, 7, 2, 3, 5, 4, 6, 0};sort(arr,0,arr.length-1);System.ou…

AST-抽象语法树

js加密解混淆首先想到的是AST语法树&#xff0c;那么什么是AST呢&#xff0c;学习AST过程的一些笔记 1.AST是JS执行的第一步是读取 js 文件中的字符流&#xff0c;然后通过词法分析生成令牌流Tokens&#xff0c;之后再通过语法分析生成 AST&#xff08;Abstract Syntax Tree&a…

3D 旋转木马

在工作中我们常用到3D装换和3D位移 主要知识点 3D位移&#xff1a;transale3d(x,y,z)3D旋转&#xff1a;rotate3d(x,y,z)透视&#xff1a;perspective3D呈现 transfrom-style 1、 transale3d translform: translform:translateX(100px):仅仅是在x轴上移动translform:transl…

[NOI2014] 随机数生成器(模拟+贪心)

题面 [NOI2014] 随机数生成器 - 洛谷 题解 缝合题 第一部分&#xff0c;直接模拟题目操作生成二维数组即可&#xff0c;复杂度O(n*mQ) 第二部分&#xff0c;是一个比较经典的字典序贪心 首先肯定需要将最小的数放到路径上&#xff0c;这样可选的剩下的数就被限制在了最小数…

Redis 管道

问题由来&#xff1a;如何优化频繁命令往返造成的性能瓶颈&#xff1f; Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务。 一个请求会遵循以下步骤&#xff1a; 1、客户端向服务端发送命令分四步(发送命令→命令排队→命令执行→返回结果)&#xff0c;并监听S…

Codeforces Round 883 (Div. 3) A~G

比赛链接&#xff1a;Dashboard - Codeforces Round 883 (Div. 3) - Codeforces 目录 A. Rudolph and Cut the Rope B. Rudolph and Tic-Tac-Toe C. Rudolf and the Another Competition D. Rudolph and Christmas Tree E. Rudolf and Snowflakes F. Rudolph and Mimic…

JavaWeb项目(包含SSM项目)部署到Linux云服务器

目录 一、云服务器环境部署 1、安装JDK 查看JDK的命令为&#xff1a; 安装JDK命令&#xff1a; 2、安装Tomcat 2.1 安装步骤 2.2 验证Tomcat是否启动成功 3、安装MySQL 二、部署 Web 项目到 Linux 2.1 在云服务器中数据库建库建表 2.2 修改部署项目连接数据库密码 …

Qt(Day2)

实现登录框中&#xff0c;当登录成功时&#xff0c;关闭登录界面&#xff0c;并跳转到其他界面&#xff1a;

Go实现在线词典翻译(三种翻译接口,结合sync)

火山翻译 首先介绍用火山翻译英译汉。 package mainimport ("bufio""bytes""encoding/json""fmt""io""log""net/http""os""strings""unicode" )type DictRequestHS st…

第四章:角色和菜单管理功能【基于Servlet+JSP的图书管理系统】

角色和菜单功能 一、角色功能 接下来我们可以完成角色管理的增删改查操作 1. Bean对象 创建sys_role对应的实体对象SysRole Data public class SysRole {private Integer id;private String name;private String notes;private Date createTime; }2. Dao层 现在我们就可以在D…

JVM(Java虚拟机)详解

目录 一、JVM内存区域划分 1. 什么是内存区域划分以及为啥要进行区域划分 2. JVM内存区域划分详解 3. 堆区详解&#xff1a; 4. 给一段代码&#xff0c;问某个变量是在那个区域上&#xff1f; 二、JVM类加载机制 1.类加载的过程 2. 类加载的时机 3. 双亲委派模型&#xff08…

下班前几分钟,我彻底玩懂了tmux

目录 1. tmux简介2. Session3. Window4. Pane5. 自定义tmux配置6. 在shell脚本中操纵tmuxReferences 1. tmux简介 tmux&#xff08;terminal multiplexer&#xff09;是一个非常强大的工具&#xff0c;主要有以下几点功能&#xff1a; 终端复用&#xff1a; tmux 使你能够在一…