「Python」pandas入门教程
pandas适合于许多不同类型的数据,包括:
- 具有异构类型列的表格数据,例如SQL表格或Excel数据
- 有序和无序(不一定是固定频率)时间序列数据。
- 具有行列标签的任意矩阵数据(均匀类型或不同类型)
- 任何其他形式的观测/统计数据集。
由于这是一个Python语言的软件包,因此需要你的机器上首先需要具备Python语言的环境。关于这一点,请自行在网络上搜索获取方法。
关于如何获取pandas请参阅官网上的说明:pandas Installation。
通常情况下,我们可以通过pip来执行安装:
或者通过conda 来安装pandas:
目前(2018年2月)pandas的最新版本是v0.22.0(发布时间:2017年12月29日)。
我已经将本文的源码和测试数据放到Github上: pandas_tutorial ,读者可以前往获取。
另外,pandas常常和NumPy一起使用,本文中的源码中也会用到NumPy。
建议读者先对NumPy有一定的熟悉再来学习pandas,我之前也写过一个NumPy的基础教程,参见这里:Python 机器学习库 NumPy 教程
核心数据结构
pandas最核心的就是Series和DataFrame两个数据结构。
这两种类型的数据结构对比如下:
DataFrame可以看做是Series的容器,即:一个DataFrame中可以包含若干个Series。
注:在0.20.0版本之前,还有一个三维的数据结构,名称为Panel。这也是pandas库取名的原因:pan(el)-da(ta)-s。但这种数据结构由于很少被使用到,因此已经被废弃了。
Series
由于Series是一维结构的数据,我们可以直接通过数组来创建这种数据,像这样:
这段代码输出如下:
这段输出说明如下:
- 输出的最后一行是Series中数据的类型,这里的数据都是int64类型的。
- 数据在第二列输出,第一列是数据的索引,在pandas中称之为Index。
我们可以分别打印出Series中的数据和索引:
这两行代码输出如下:
如果不指定(像上面这样),索引是[1, N-1]的形式。不过我们也可以在创建Series的时候指定索引。索引未必一定需要是整数,可以是任何类型的数据,例如字符串。例如我们以七个字母来映射七个音符。索引的目的是可以通过它来获取对应的数据,例如下面这样:
这段代码输出如下:
DataFrame
下面我们来看一下DataFrame的创建。我们可以通过NumPy的接口来创建一个4x4的矩阵,以此来创建一个DataFrame,像这样:
这段代码输出如下:
从这个输出我们可以看到,默认的索引和列名都是[0, N-1]的形式。
我们可以在创建DataFrame的时候指定列名和索引,像这样:
这段代码输出如下:
我们也可以直接指定列数据来创建DataFrame:
这段代码输出如下:
请注意:
- DataFrame的不同列可以是不同的数据类型
- 如果以Series数组来创建DataFrame,每个Series将成为一行,而不是一列
例如:
df4的输出如下:
我们可以通过下面的形式给DataFrame添加或者删除列数据:
这段代码输出如下:
Index对象与数据访问
pandas的Index对象包含了描述轴的元数据信息。当创建Series或者DataFrame的时候,标签的数组或者序列会被转换成Index。可以通过下面的方式获取到DataFrame的列和行的Index对象:
这两行代码输出如下:
请注意:
- Index并非集合,因此其中可以包含重复的数据
- Index对象的值是不可以改变,因此可以通过它安全的访问数据
- DataFrame提供了下面两个操作符来访问其中的数据:
- loc:通过行和列的索引来访问数据
- iloc:通过行和列的下标来访问数据
例如这样:
第一行代码访问了行索引为0和1,列索引为“note”的元素。第二行代码访问了行下标为0和1(对于df3来说,行索引和行下标刚好是一样的,所以这里都是0和1,但它们却是不同的含义),列下标为0的元素。
这两行代码输出如下:
文件操作
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可以这样完成安装:
安装完之后可以通过pip查看这个库的信息:
接下来我们看一个读取Excel的简单的例子:
这个Excel的内容如下:
注:本文的代码和数据文件可以通过文章开头提到的Github仓库获取。
读取CSV文件
下面,我们再来看读取CSV文件的例子。
第一个CSV文件内容如下:
读取的方式也很简单:
我们再来看第2个例子,这个文件的内容如下:
严格的来说,这并不是一个CSV文件了,因为它的数据并不是通过逗号分隔的。在这种情况下,我们可以通过指定分隔符的方式来读取这个文件,像这样:
实际上,read_csv支持非常多的参数用来调整读取的参数,如下表所示:
详细的read_csv函数说明请参见这里:pandas.read_csv
处理无效值
现实世界并非完美,我们读取到的数据常常会带有一些无效值。如果没有处理好这些无效值,将对程序造成很大的干扰。
对待无效值,主要有两种处理方法:直接忽略这些无效值;或者将无效值替换成有效值。
下面我先创建一个包含无效值的数据结构。然后通过pandas.isna函数来确认哪些值是无效的:
这段代码输出如下:
忽略无效值
我们可以通过pandas.DataFrame.dropna函数抛弃无效值:
注:dropna默认不会改变原先的数据结构,而是返回了一个新的数据结构。如果想要直接更改数据本身,可以在调用这个函数的时候传递参数 inplace = True。
对于原先的结构,当无效值全部被抛弃之后,将不再是一个有效的DataFrame,因此这行代码输出如下:
我们也可以选择抛弃整列都是无效值的那一列:
注:axis=1表示列的轴。how可以取值'any'或者'all',默认是前者。
这行代码输出如下:
替换无效值
我们也可以通过fillna函数将无效值替换成为有效值。像这样:
这段代码输出如下:
将无效值全部替换成同样的数据可能意义不大,因此我们可以指定不同的数据来进行填充。为了便于操作,在填充之前,我们可以先通过rename方法修改行和列的名称:
这段代码输出如下:
处理字符串
数据中常常牵涉到字符串的处理,接下来我们就看看pandas对于字符串操作。
Series的str字段包含了一系列的函数用来处理字符串。并且,这些函数会自动处理无效值。
下面是一些实例,在第一组数据中,我们故意设置了一些包含空格字符串:
在这个实例中我们看到了对于字符串strip的处理以及判断字符串本身是否是数字,这段代码输出如下:
下面是另外一些示例,展示了对于字符串大写,小写以及字符串长度的处理:
该段代码输出如下:
「Python」pandas入门教程的更多相关文章
- Python 数据处理库 pandas 入门教程
Python 数据处理库 pandas 入门教程2018/04/17 · 工具与框架 · Pandas, Python 原文出处: 强波的技术博客 pandas是一个Python语言的软件包,在我们使 ...
- 「python」: arp脚本的两种方法
「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...
- Python开发的入门教程(一)-数据类型、变量
介绍 Python第一门课程,是Python开发的入门教程,将介绍Python语言的特点和适用范围,Python基本的数据类型,条件判断和循环,函数,以及Python特有的切片和列表生成式. Pyth ...
- 程序员用于机器学习编程的Python 数据处理库 pandas 入门教程
入门介绍 pandas适合于许多不同类型的数据,包括: · 具有异构类型列的表格数据,例如SQL表格或Excel数据 · 有序和无序(不一定是固定频率)时间序列数据. · 具有行列标签的任意矩阵数据( ...
- 「Python」socket指南
开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...
- python之scrapy入门教程
看这篇文章的人,我假设你们都已经学会了python(派森),然后下面的知识都是python的扩展(框架). 在这篇入门教程中,我们假定你已经安装了Scrapy.如果你还没有安装,那么请参考安装指南. ...
- Python运算符 - Python零基础入门教程
目录 一.算术运算符 二.赋值运算符 三.比较运算符 四.运算符的优先等级 五.重点总结 六.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python ...
- Python break/continue - Python零基础入门教程
目录 一.break 二.continue 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python wh ...
- Python for循环 - Python零基础入门教程
目录 一.for 循环语法 二.for 循环实战 三.重点总结 四.猜你喜欢 零基础 Python 学习路线推荐 : Python 学习目录 >> Python 基础入门 在 Python ...
随机推荐
- 关于XSS的一些知识点
安全套接层(SSL)无助于减少XSS攻击.当Web浏览器使用SSL的时候,在网络中传送的数据是经过加密的,但是因为XSS攻击是在客户机器上发生的,所以数据已经被解密了,这时,攻击者仍然能够利用XSS安 ...
- 美国警察iPhone数据线挡住歹徒子弹获救
泡泡网手机频道11月1日 现在手机的功能越来越丰富,不仅可以接打电话.收发短信.玩游戏聊天,关键时刻还能救命.前天HTC手机再次忠心护主,让许多同学对HTC赞赏有加.而现在又有人捡了一条命,不过这次救 ...
- Scrum立会报告+燃尽图(十一月十八日总第二十六次):功能开发与讨论贡献分配规则
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...
- Macbook Pro开机黑屏了。
问题描述:点了appstore的更新,然后重启黑屏.(说明:黑屏是屏幕没亮:灰屏是屏幕亮了是灰黑色的.) 黑屏问题大,灰屏问题小. 开机按option没反应的跳到步骤四 一.数据 苹果电脑黑屏了,想搞 ...
- Beta版冲刺前准备
[团队概要] 团队项目名:小葵日记 团队名:日不落战队 队员及角色: 队员 角色 备注 安琪 前端工程师 队长 佳莹 前端工程师 智慧 后端工程师 章鹏 后端工程师 语恳 UI设计师 炜坤 前端工程师 ...
- 给个理由走下去——读《我是一只IT小小鸟》有感
和很多人一样,高考失利,迷迷茫茫的走进了软件学院.关于这个专业,具体学什么是一概不知,只知道学软件的很帅很帅,幻想着以后当个行侠仗义的黑客,或是开发一款自己的游戏都是十分诱惑人的.然而这个世界有个不成 ...
- openssl 加密算法 CA 介绍
首先对于tftp服务的简要使用说明 (1)yum安装:tftp.tftp-server (2)启动tftp CentOS 6 service xinetd restart chkconfig tf ...
- PHP执行原理
简单解释:PHP执行原理 客户端向服务器发送一个请求,如果请求的是一个HTML页面,服务器直接将HTML页面发送到客户端给浏览器解析,如果请求的是PHP页面,则服务器会运行PHP页面然后生成标准的HT ...
- 九度-题目1026:又一版 A+B
http://ac.jobdu.com/problem.php?pid=1026 题目描述: 输入两个不超过整型定义的非负10进制整数A和B(<=231-1),输出A+B的m (1 < m ...
- MySQL 分组排序问题
SQL好久不写了,有些生疏了,一个分组排序问题想了快半天,整理下. 学生表 CREATE TABLE `t_student` ( `id` bigint(20) NOT NULL AUTO_INCRE ...