导师花了一个月才给我们整理的pandas入门教程!分享给大家!

pandas是一个Python语言的软件包,在我们使用Python语言进行机器学习编程的时候,这是一个非常常用的基础编程库。本文是对它的一个入门教程。

pandas提供了快速,灵活和富有表现力的数据结构,目的是使“关系”或“标记”数据的工作既简单又直观。它旨在成为在Python中进行实际数据分析的高级构建块。

入门介绍(进群:548377875   即可获取相关书籍,以及大量的视频教程哦!)

pandas适合于许多不同类型的数据,包括

  • 具有异构类型列的表格数据,例如sql表格或Excel数据
  • 有序和无序(不一定是固定频率)时间序列数据。
  • 具有行列标签的任意矩阵数据(均匀类型或不同类型)
  • 任何其他形式的观测/统计数据集。

由于这是一个Python语言的软件包,因此需要你的机器上首先需要具备Python语言的环境。关于这一点,请自行在网络上搜索获取方法

关于如何获取pandas请参阅官网上的说明:pandas Installation。

通常情况下,我们可以通过pip来执行安装:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

或者通过conda 来安装pandas:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

目前(2018年2月)pandas的最新版本是v0.22.0(发布时间:2017年12月29日)。

我已经将本文的源码和测试数据放到Github上: pandas_tutorial ,读者可以前往获取

另外,pandas常常和NumPy一起使用,本文中的源码中也会用到NumPy。

建议读者先对NumPy有一定的熟悉再来学习pandas,我之前也写过一个NumPy的基础教程,参见这里:Python 机器学习库 NumPy 教程

核心数据结构

pandas最核心的就是Series和DataFrame两个数据结构。

这两种类型的数据结构对比如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

DataFrame可以看做是Series的容器,即:一个DataFrame中可以包含若干个Series。

注:在0.20.0版本之前,还有一个三维的数据结构,名称为Panel。这也是pandas库取名的原因:pan(el)-da(ta)-s。但这种数据结构由于很少被使用到,因此已经被废弃了。

Series

由于Series是一维结构的数据,我们可以直接通过数组来创建这种数据,像这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段输出说明如下:

  • 输出的最后一行是Series中数据的类型,这里的数据都是int64类型的。
  • 数据在第二列输出,第一列是数据的索引,在pandas中称之为Index。

我们可以分别打印出Series中的数据和索引:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这两行代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

如果不指定(像上面这样),索引是[1,N-1]的形式。不过我们也可以在创建Series的时候指定索引。索引未必一定需要是整数,可以是任何类型的数据,例如字符串。例如我们以七个字母来映射七个音符。索引的目的是可以通过它来获取对应的数据,例如下面这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

DataFrame

下面我们来看一下DataFrame的创建。我们可以通过NumPy的接口来创建一个4x4的矩阵,以此来创建一个DataFrame,像这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

从这个输出我们可以看到,认的索引和列名都是[0,N-1]的形式。

我们可以在创建DataFrame的时候指定列名和索引,像这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

我们也可以直接指定列数据来创建DataFrame:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

请注意:

  • DataFrame的不同列可以是不同的数据类型
  • 如果以Series数组来创建DataFrame,每个Series将成为一行,而不是一列

例如:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

df4的输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

我们可以通过下面的形式给DataFrame添加或者删除列数据:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

Index对象与数据访问

pandas的Index对象包含了描述轴的元数据信息。当创建Series或者DataFrame的时候,标签的数组或者序列会被转换成Index。可以通过下面的方式获取到DataFrame的列和行的Index对象:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这两行代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

请注意:

  • Index并非集合,因此其中可以包含重复的数据
  • Index对象的值是不可以改变,因此可以通过它安全的访问数据
  • DataFrame提供了下面两个操作符来访问其中的数据:
  • loc:通过行和列的索引来访问数据
  • iloc:通过行和列的下标来访问数据

例如这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

第一行代码访问了行索引为0和1,列索引为“note”的元素。第二行代码访问了行下标为0和1(对于df3来说,行索引和行下标刚好是一样的,所以这里都是0和1,但它们却是不同的含义),列下标为0的元素。

这两行代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

文件操作

pandas库提供了一系列的read_函数来读取各种格式的文件,它们如下所示:

read_csv

read_table

read_fwf

read_clipboard

read_excel

read_hdf

read_html

read_json

read_msgpack

read_pickle

read_sas

read_sql

read_stata

read_feather

读取Excel文件

注:要读取Excel文件,还需要安装另外一个库:xlrd

通过pip可以这样完成安装:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

安装完之后可以通过pip查看这个库的信息:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

接下来我们看一个读取Excel的简单的例子:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这个Excel的内容如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

注:本文的代码和数据文件可以通过文章开头提到的Github仓库获取

读取CSV文件

下面,我们再来看读取CSV文件的例子。

一个CSV文件内容如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

读取的方式也很简单:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

我们再来看第2个例子,这个文件内容如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

严格的来说,这并不是一个CSV文件了,因为它的数据并不是通过逗号分隔的。在这种情况下,我们可以通过指定分隔符的方式来读取这个文件,像这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

实际上,read_csv支持非常多的参数用来调整读取的参数,如下表所示:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

详细的read_csv函数说明请参见这里:pandas.read_csv

处理无效值

现实世界并非完美,我们读取到的数据常常会带有一些无效值。如果没有处理好这些无效值,将对程序造成很大的干扰。

对待无效值,主要有两种处理方法:直接忽略这些无效值;或者将无效值替换成有效值。

下面我先创建一个包含无效值的数据结构。然后通过pandas.isna函数来确认哪些值是无效的:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

忽略无效值

我们可以通过pandas.DataFrame.dropna函数抛弃无效值:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

注:dropna认不会改变原先的数据结构,而是返回了一个新的数据结构。如果想要直接更改数据本身,可以在调用这个函数的时候传递参数 inplace = True。

对于原先的结构,当无效值全部被抛弃之后,将不再是一个有效的DataFrame,因此这行代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

我们也可以选择抛弃整列都是无效值的那一列:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

注:axis=1表示列的轴。how可以取值'any'或者'all',认是前者。

这行代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

替换无效值

我们也可以通过fillna函数将无效值替换成为有效值。像这样:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

将无效值全部替换成同样的数据可能意义不大,因此我们可以指定不同的数据来进行填充。为了便于操作,在填充之前,我们可以先通过rename方法修改行和列的名称

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

处理字符串

数据中常常牵涉到字符串的处理,接下来我们就看看pandas对于字符串操作。

Series的str字段包含了一系列的函数用来处理字符串。并且,这些函数自动处理无效值。

下面是一些实例,在第一组数据中,我们故意设置了一些包含空格字符串:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

在这个实例中我们看到了对于字符串strip的处理以及判断字符串本身是否是数字,这段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

下面是另外一些示例,展示了对于字符串大写,小写以及字符串长度的处理:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

该段代码输出如下:

导师花了一个月才给我们整理的pandas入门教程!分享给大家!

结束语

本文是pandas的入门教程,因此我们只介绍了最基本的操作。更深入的内容,以后有机会我们再来一起学习。

由于文献问题,未完待续......

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实