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

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



推荐阅读
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 原文地址:https:www.cnblogs.combaoyipSpringBoot_YML.html1.在springboot中,有两种配置文件,一种 ... [详细]
  • Nginx使用AWStats日志分析的步骤及注意事项
    本文介绍了在Centos7操作系统上使用Nginx和AWStats进行日志分析的步骤和注意事项。通过AWStats可以统计网站的访问量、IP地址、操作系统、浏览器等信息,并提供精确到每月、每日、每小时的数据。在部署AWStats之前需要确认服务器上已经安装了Perl环境,并进行DNS解析。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • Android Studio Bumblebee | 2021.1.1(大黄蜂版本使用介绍)
    本文介绍了Android Studio Bumblebee | 2021.1.1(大黄蜂版本)的使用方法和相关知识,包括Gradle的介绍、设备管理器的配置、无线调试、新版本问题等内容。同时还提供了更新版本的下载地址和启动页面截图。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • 网址:https:vue.docschina.orgv2guideforms.html表单input绑定基础用法可以通过使用v-model指令,在 ... [详细]
  • [echarts] 同指标对比柱状图相关的知识介绍及应用示例
    本文由编程笔记小编为大家整理,主要介绍了echarts同指标对比柱状图相关的知识,包括对比课程通过率最高的8个课程和最低的8个课程以及全校的平均通过率。文章提供了一个应用示例,展示了如何使用echarts制作同指标对比柱状图,并对代码进行了详细解释和说明。该示例可以帮助读者更好地理解和应用echarts。 ... [详细]
  • 本文比较了eBPF和WebAssembly作为云原生VM的特点和应用领域。eBPF作为运行在Linux内核中的轻量级代码执行沙箱,适用于网络或安全相关的任务;而WebAssembly作为图灵完备的语言,在商业应用中具有优势。同时,介绍了WebAssembly在Linux内核中运行的尝试以及基于LLVM的云原生WebAssembly编译器WasmEdge Runtime的案例,展示了WebAssembly作为原生应用程序的潜力。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 阿里Treebased Deep Match(TDM) 学习笔记及技术发展回顾
    本文介绍了阿里Treebased Deep Match(TDM)的学习笔记,同时回顾了工业界技术发展的几代演进。从基于统计的启发式规则方法到基于内积模型的向量检索方法,再到引入复杂深度学习模型的下一代匹配技术。文章详细解释了基于统计的启发式规则方法和基于内积模型的向量检索方法的原理和应用,并介绍了TDM的背景和优势。最后,文章提到了向量距离和基于向量聚类的索引结构对于加速匹配效率的作用。本文对于理解TDM的学习过程和了解匹配技术的发展具有重要意义。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
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社区 版权所有