热门标签 | 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

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



推荐阅读
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • Linux CentOS 7 安装PostgreSQL 9.5.17 (源码编译)
    近日需要将PostgreSQL数据库从Windows中迁移到Linux中,LinuxCentOS7安装PostgreSQL9.5.17安装过程特此记录。安装环境&#x ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 在PHP中如何正确调用JavaScript变量及定义PHP变量的方法详解 ... [详细]
  • 技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统
    技术分享:使用 Flask、AngularJS 和 Jinja2 构建高效前后端交互系统 ... [详细]
  • 字符串学习时间:1.5W(“W”周,下同)知识点checkliststrlen()函数的返回值是什么类型的?字 ... [详细]
  • javascript分页类支持页码格式
    前端时间因为项目需要,要对一个产品下所有的附属图片进行分页显示,没考虑ajax一张张请求,所以干脆一次性全部把图片out,然 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • MySQL的查询执行流程涉及多个关键组件,包括连接器、查询缓存、分析器和优化器。在服务层,连接器负责建立与客户端的连接,查询缓存用于存储和检索常用查询结果,以提高性能。分析器则解析SQL语句,生成语法树,而优化器负责选择最优的查询执行计划。这一流程确保了MySQL能够高效地处理各种复杂的查询请求。 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
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社区 版权所有