热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pandas的自带数据集_Pandas到底是个怎样的包?

sh说明:本pandas非卧龙的pandas,而是Python众多科学计算包中的pandas。本次Pandas的简洁介绍,针对的是此包的新手࿰
dbc1ed56451b2967c0914dfa1472a2c6.png

sh说明:本pandas非卧龙的pandas,而是Python众多科学计算包中的pandas。

本次Pandas的简洁介绍,针对的是此包的新手,但已假设你已懂得Python语言的基本语法,以及安装了Pandas包。如需了解更多Pandas包的高级用法,请移步此链接:

Cookbook - pandas 0.25.3 documentation​pandas.pydata.org
295152f2e091a1d9446a80a0f20d37f4.png

(一)给使用者的话

pandas拥有简洁、优雅、明确的两种基本数据结构,此二者将使对关系型数据的处理变得便捷和直观。

pandas的以上特点使它的用户在分析来自现实世界(无论是观测值还是统计值)的数据方面,可以不关注其内部实现细节,做到“拿来即用”。

此外,pandas有它自己更好的愿景,那就是做一个可以对接任何编程语言的开源数据分析工具。

适用于pandas的数据类型很丰富。

  1. 例如表格型数据,就像SQL表格和Excel表格中的数据结构(译者的话,Pandas的实现机制不要求每一列的每个数据值都同属一个Python语言的内置数据类型,但使用同一数据类型,可使程序的运行时间缩短。)
  2. 有序的和无序的(不要求频率相同)时间序列数据。
  3. 任意拥有列标签和行标签的矩阵数据,矩阵里面的数值数据类型可要求不同(译者的话,我觉得在此,仍然使用相同数据类型好一点,使用不同数据类型对时间要求不可能不变,假设为O(n),想一想,如果你处理百万数量级数据呢?对为i5的电脑恐怕也是够呛的吧?提升到千万级别呢?)
  4. 任何其他的观测值和统计值数据集。这些数据就真的不必带着标签奔入pandas的怀抱了。

Pandas拥有两大内置数据结构,一维数据结构-Series,二维数据结构-DataFrame。这两个数据结构被广泛应用于处理金融、统计、社会科学和其他工程领域。对于R语言的使用者来说,DataFrame带来了远远超过R语言data.frame提供的便利。pandas是基于Numpy而建立的(当然,绝不是对Numpy的简单包装),通过与其他Python包结合,旨在共同建立一个可用来进行科学计算的环境。

pandas擅长哪些事呢?

  1. 处理缺失值,无论是在浮点数和非浮点数中;
  2. 可调整大小:比如在二维数据结构的列可被增加或者删除,在更高维的数据结构中亦如此;
  3. 自动的和明确的数据值对齐,此种操作通过数据集的标签来对齐,或者使用者跳过标签,让Series互相对其或者DataFrame互相对齐,如果在你的计算中,你有此必要。
  4. 强有力和灵活的聚合函数,让你在执行分列、合并、使用其他函数去计合、转置数据时显得得心应手。
ad39f833d20608ebb8457eb474b1839d.png
  1. 在Numpy和Python的其他数据结构中,若存在着数据值类型凌乱的、索引不同的数据集,你可以使用Pandas很方便地将其转换为Pandas的DataFrame对象。
  2. 对较大的数据集实现以列标签为基础地切片、索引和子设置。
  3. 直观地合并和加入其他数据集。
  4. 灵活地调整和透视其他数据集。
  5. Hierarchical labeling of axes (possible to have multiple labels per tick)轴的分层标记中(这里的轴就是:比如一个有三张表(三张DataFrame)的数据集中,则每一张表就是一个轴,而tick表示是对列的抽象,每一个具体的列对象用一个列标签表示,若仍有疑惑的,可翻一翻此链接https://matplotlib.org/api/axes_api.html?highlight=axes#module-matplotlib.axes)。
  6. 便捷的数据导入导出接口,这些数据可来自CSV或者txt文本,execl文件,数据库,以及HDF5文档。
  7. 时间序列数据的特殊处理,比如日期范围的生成,抽取频率的确定,移动窗口、线性回归,日期偏移和滞后等(可看看,这个链接https://zhuanlan.zhihu.com/p/92349149)。

以上这些原则可以帮助我们克服使用其他语言的科学计算包而遇到的不便。

数据的科学计算通常被拆解成以下的流程:

  1. 清洗和一致化数据;
  2. 分析和建模;
  3. 可视化数据分析结果;

pandas对其中的各个流程都是理想的工具。

pandas还有其他特点

  1. pandas的运行效率高。因为Cython像C语言一样接近底层的算术运算单元,而Cython是一种编译型语言,旨在用来实现CPython拓展模块(或许这个链接解释地更清楚,https://cn.bing.com/search?q=what%20is%20Cython%20code&qs=n&form=QBRE&sp=-1&pq=what%20is%20cython%20code&sc=1-19&sk=&cvid=90868BB6518047D88FECB36BE1DED43D),pandas就是其中的拓展模块。
  2. pandas是一个独立地统计计算模块,这使它成为Python科学计算系统中地重要组成部分。
  3. pandas在金融数据分析应用中具有可拓展性。

Padnas数据结构

5dacdce122df9619ee09a9d89c539ec0.png
75e2f6543080ab6b50135dcdb807a84f.png

为何不止一种数据结构?

我们何不认为pandas数据结构是其更低维度数据结构的容器呢?比如,DataFrame是序列的容器(如上图所示),序列是标量的容器(标量就是一个具体的数值)。我们可以像使用Python内置数据结构dict一样对这些容器对象进行插入或者移除。

对于使用过Numpy中ndarray的人来说,会问:对时间序列或者样本数据集的方向控制,pandas会提供哪些API方法呢?

译者举个实例

2bc14db73560bf0d5659d41389b56c76.png

假设我们导入一个6维数据呢,若以此方法,这是不是让人眼花缭乱呢?

但pandas的表格型数据结构(DataFrame)使用索引(表示行)和标签(表示列)来帮助大家减轻这种精神负担。

DataFrame中的列是可迭代的对象,说明如下:

for col in df.columns:series = df[col]# do something with series

数据的可变性和数据复制

所有pandas数据结构中的数值都是可变的,但不是所有数据结构中的大小是可变的。

比如,Series的长度是不能改变的,但是列缺可以被插入DataFrame中。然而因为有大量产生新DataFrame对象的方法,因此可以让新进来的数据进入新表中。保持DataFrame的大小不变,在大多数情况下是个明智的选择。

(二)正式介绍pandas的方法

19b7af36a6baf693c971363a1ce4624c.png

本次翻译包含这样几个方面:

(1)对象的创建

Pandas的基本数据结构为序列和dataframe

(2)数据查看

以行的方式、以列的方式、以索引的方式、以Numpy数组的方式、以转置的方式、以轴的方式、以某一列作为筛选列的方式

(3)数据索引或切片、定位

以索引来选择选择数据,方法自然被称为数据索引,选取某(几)列或某(几)行,方法自然被称为数据切片;选取数据通过类似于横纵坐标的方式,方法自然被称为数据定位;

增加列的方式

作为以上的拓展,还有以布尔值判断作为数据索引或切片、定位的方式,以及增加列;

(4)缺失值的处理

Pandas在处理缺失值方面,使用其自定义的方法,np.nan。

(5)使用Pandas处理数据的基本方法

比如在数据清理方面,pandas有其可直接使用的方法,但实际中,数据清理过程可能略显复杂,因此还可以使用Pandas的apply函数,它是以其他函数作为参数。

(6)值计数

(7)处理字符串的方法

这里要求Series内部值得数据类型为字符,而后便按照字符串惯有的处理方法,比如典型的有字母序。

(8)合并和加入

对于Series和DataFrame对象的合并,pandas提供了许多便捷的方法,比如join和merge-type操作。

不过,此合并的内部逻辑是:按照索引值来合并在一起或者进行算术运算。

(9)聚合函数

聚合函数(group by)大大减少了我们对pandas数据对象进行复杂操作的步骤。

它可以和其他函数写在同一行代码中,通过“点语法”。

这些复杂操作方法包括如下:

  1. Splitting
  2. Applying
  3. Combining

(10)栈

(11)透视表

(12)时间序列

pandas在样本选取方式的修改上,有着堪称简洁、优雅、明确的方法。涉及的方式修改上包括频率的修改、时间戳的修改。

这些方法可以被运用在但不限于金融数据的处理上。

(13)数值类型化

DataFrame是能够容纳一些表属性的数据的。

(15)可视化

在DataFrame或者Series对象中,实现数据可视化可用plot()方法。

(16)数据的导入与导出

支持的格式有csv、text、xlsx。

(17)异常

正式开始

  1. 导入此包的规范
a5f8f63f76691a6efcc2f7ea283d6359.png

2.对象创建

通过以list作为参数,来创建一个Series对象,pandas给这个对象加上默认的索引值。

ac180ac7f255563dc86f99d75041a547.png
cfbcc6eb5354a9a95c03db4890fe47ad.png

通过以Numpy数组作为参数,创建一个DataFrame对象,日期时间对象作索引,并且给它加上列标签。

5a6e4ccc7c0d7295a03763a64d5715a4.png

通过传入dict作为参数

d9d24c5d61f8eddfa5a9ef53ede5cc00.png
DataFrame对象-字典作为参数

此时,每个列的数据类型可不同。

bd5466ab35de62d75deb576b385bd852.png
查看数据类型用dtypes方法

3.查看数据

怎样查看DataFrame的最上面几行和最下面几行呢?

8e3f2812a5d8ed0256f0c207e1e18247.png

显示索引和列名

56f172c4bbf9933f4dcd03dc1eb2d02c.png

DataFrame.to_numpy()给了我们一个像查看数组一样得方法,不过数组还有索引,此方法返回得结果既无索引,也无列名。

如果使用此方法,一旦列之间得数据类型不同,则付出的时间代价是很大的,这或许来自pandas和numpy的基础性差别:Numpy的数组是一种数据类型,而pandas得DataFrames的列与列之间可为不同数据类型。但DataFrame拥有两种或两种以上的不同数据类型时,DataFrame.to_numpy()返回的结果有一个表示此结果为object的对象,object为Python语言中抽象级别最高的对象,比如所有类都是从object继承过来的。

ad502f769dd9aecd60589c7e533d2077.png

describe()可以对数据做描述性统计。

27798b5e4dc655c2ea5eec7343a2ed3f.png

数据转置

7da82abd72f342eb73658bbde5642242.png

通过列排序

ecf0af50cf1ee64e5d022933cbd83298.png
列排序
d6799d5780c169867cfa4d90f2fd16f1.png
列排序的可视化
c520f8edad57fa2a2aa5108f6f48ecc4.png
列排序的可视化

通过值排序

62e80c819e68508f7cbe6f4d05dd2a4f.png
943dd045e6fdb4ac24a448e77e9372a4.png
6c3b70ad7f8e2d84d026931094867a30.png
大家看到B标签那个突起的倒三角形没?那个是spyderIDE提供的,很方便吧!根本不用输入这些函数!!!

选取

1.Getting

选取一个单列,返回一个Series对象,效果等同于df.A

3283847d443decd9a6f01eb93e0c6a12.png

通过[],可以对行进行切片

可以自己传入表示区间的整数

0aeea44fa4bb64129bc3fd5ab915b954.png

也可以传入索引

c5324822d6466deab977422165e6b9e4.png

通过loc函数

1.传入某一索引值,返回此索引值所在行的全部数据值。

ffc41dc7d68b26f59d8ea1da76c9ea35.png

2.传入两个参数,两个参数都可作为目标范围。

ce1e8b0bd7bcc57b2e050f19b41773f7.png
743a53863e160e6933098e5e5c2d8b15.png

倘若要得到一个具体的标量值呢?

02da9ba78072f26021ee0d01d136a722.png
此时,at函数和loc函数具有同样的效果

定位

不管你传入几个一个参数,还是两个参数,第一个参数一定是表示索引的区间,第二个参数表示列的区间。

比如我要选取每一列的第三行

dc9dbdf74ac3331a44e2496894bc5e05.png

比如我要选取一二列的第四行和第五行呢?

0d13b864f40a6506db9d41cd94e1b574.png

比如我要隔一行隔一列的取呢?

9bb33ed4e92e5f0f2964d9e225d6fbc5.png

如果我要索引列只选取部分,而选择全部其他列呢?,没错!用‘:’来作贪婪匹配!

3f1e091ac65d92df35b426e400431234.png

如果要选取全部索引列呢?没错,我们也用贪婪匹配,

f015dfde4645e5aa17c328d985c1e14e.png

如果要实现精确打击呢?根据上面的推理,我们给每个位置参数传入一个整数就行了。

428f3fd524cd3361ef2cef871b77282f.png
你看,出现iat了

用boolean值来选取

如果我们要选取想某一列的值全部大于零呢?

828fe531c1612abbd380b4571353489e.png

如果我们想对DataFrame表格全部大于零的值进行选取呢?

63476c24ab0ba8e71c029f7957c58cc3.png

假如我们像选取某个特定的数据值呢?

12d4fb77a7a50e48189a75dd6ce81291.png

假如我们要加一个新的列呢?

这里我们先创建一个新序列,毕竟你的有数据加上去啊!

993e6a8904d2c3abdd4a3e9d14de85f6.png

加入一个新的列,

0dd133f47070d8ef480d942c7299f7fe.png

倘若我们要对某一值进行重置呢?道理是一样的,先进行定位,定位之后再赋值

d3648d3f70fcfd2c54d1f82be6caf6aa.png

此时第二种方法,写法上更简单点,只需传入两个合理的整数即可,没错就是iat函数了,

be808694e6fd79bc1d8738bfc7bfad38.png

把某个列的值全部进行替换,也是进行定位,然后再赋值。

a0ae156fc8b8780d87d8c1fac32279c6.png

还可以用布尔值进行定位,然后再赋值

3f5beeb1511a7bfdfc3d964fa3e074c7.png

以上便是查看数据部分,很简单吧,拿来就用!!!,现在介绍缺失值处理部分!!!

处理缺失值

对于缺失值,我们是不能进行任何计算的!

我们先根据df创造一个新的dataframe出来,这个新的dataframe具有如下特点,首先它的索引值变成了4个,然后增加一个新的列,新列的部分值成为了1.这样,我们可以复习下,上卖弄的方法。

没错,这里的主要需要解决的就是重置索引值,我们使用reindex函数。

792d0a30d6bc727bd52c57ce92ee42ba.png

假设我们要删除有缺失值的每一行呢?,使用dropna函数,传入how条件表示的参数

8e640b566a5b7fc0e5bd507add08e138.png

如果我们想给缺失值补上一个值呢?

10039ef2c36859d483f10d2354bc1f7b.png

如果我们想把缺失值用True来表示呢?以方便进一步使用统计推断方法呢?

3b408166585f6b89bb04e70b4befc134.png

现在就开始对数据使用初步的统计推断方法了。

求平均值

假如我们想求每一列的平均值?

8f02457be622726b16ae523b15a9aac9.png

假如我们想求某一行的平均值?

cde089ccfad30f26578940809eb133b9.png
adcc334660c50ab002596e6c94ab9781.png
1ff37af7cc0d1d5896cd214759c902f6.png

今天先改到这了。。。。。。



推荐阅读
  • Python SQLAlchemy库的使用方法详解
    本文详细介绍了Python中使用SQLAlchemy库的方法。首先对SQLAlchemy进行了简介,包括其定义、适用的数据库类型等。然后讨论了SQLAlchemy提供的两种主要使用模式,即SQL表达式语言和ORM。针对不同的需求,给出了选择哪种模式的建议。最后,介绍了连接数据库的方法,包括创建SQLAlchemy引擎和执行SQL语句的接口。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了使用cacti监控mssql 2005运行资源情况的操作步骤,包括安装必要的工具和驱动,测试mssql的连接,配置监控脚本等。通过php连接mssql来获取SQL 2005性能计算器的值,实现对mssql的监控。详细的操作步骤和代码请参考附件。 ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • MySQL多表数据库操作方法及子查询详解
    本文详细介绍了MySQL数据库的多表操作方法,包括增删改和单表查询,同时还解释了子查询的概念和用法。文章通过示例和步骤说明了如何进行数据的插入、删除和更新操作,以及如何执行单表查询和使用聚合函数进行统计。对于需要对MySQL数据库进行操作的读者来说,本文是一个非常实用的参考资料。 ... [详细]
  • 基于PgpoolII的PostgreSQL集群安装与配置教程
    本文介绍了基于PgpoolII的PostgreSQL集群的安装与配置教程。Pgpool-II是一个位于PostgreSQL服务器和PostgreSQL数据库客户端之间的中间件,提供了连接池、复制、负载均衡、缓存、看门狗、限制链接等功能,可以用于搭建高可用的PostgreSQL集群。文章详细介绍了通过yum安装Pgpool-II的步骤,并提供了相关的官方参考地址。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • ALTERTABLE通过更改、添加、除去列和约束,或者通过启用或禁用约束和触发器来更改表的定义。语法ALTERTABLEtable{[ALTERCOLUMNcolu ... [详细]
  • 如何在php中将mysql查询结果赋值给变量
    本文介绍了在php中将mysql查询结果赋值给变量的方法,包括从mysql表中查询count(学号)并赋值给一个变量,以及如何将sql中查询单条结果赋值给php页面的一个变量。同时还讨论了php调用mysql查询结果到变量的方法,并提供了示例代码。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • Ihavethefollowingonhtml我在html上有以下内容<html><head><scriptsrc..3003_Tes ... [详细]
  • 实现一个通讯录系统,可添加、删除、修改、查找、显示、清空、排序通讯录信息
    本文介绍了如何实现一个通讯录系统,该系统可以实现添加、删除、修改、查找、显示、清空、排序通讯录信息的功能。通过定义结构体LINK和PEOPLE来存储通讯录信息,使用相关函数来实现各项功能。详细介绍了每个功能的实现方法。 ... [详细]
  • 本文介绍了一种图片处理应用,通过固定容器来实现缩略图的功能。该方法可以实现等比例缩略、扩容填充和裁剪等操作。详细的实现步骤和代码示例在正文中给出。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
author-avatar
apiaoapiao_622
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有