Pandas教程【国宝级教程,一万八千字总结】(上)

简介: 本文长度多达一万八千多字,概念性的问题占了两千六百字,阅读完成+代码实验完成所需时间绝对不下两个小时,所以无论如何我也要请大家耐着性子读完这一万八千字。

Pandas

为什么学习 Pandas?

进入大数据时代,感觉我们如果不会一些分析数据的能力,就将要被时代淘汰(明目张胆拉焦虑)。

不过好在现在的技越来越先进,越来越易用,而且网络上也有越来越多的教学内容。 只要你有一些耐心,入门其实并不难。

有朋友一路跟着我的交互式教学,上手了 Python 基础, 学会了使用 Numpy 高效的数据加工计算 这两门非常有趣,而且在浏览器中都能运行代码,实现你独特想法的教学。

那么现在我们将要步入新的阶段,对大数据做出新的定义,直面大数据带来的挑战,学会使用 Pandas 来处理你日常的表格/画图/数据分析等问题。

我们正在面临的问题

大数据虽然描述的是海量的数据,但是大数据离你却并不远,特别是大数据所涵盖的技术,在你生活当中,是时刻都能使用这些大数据涉及到的技术, 来解决你生活中的具体问题。

image.png

比如我们在中学甚至更早就已经开始接触使用 Excel 了。就像我现在其实还不会编程,但是已经可以熟练使用 Excel 当中的公式, 在有次土立方相关的复杂计算时,我用 Excel 写出了当时全年级都广为流传的自动运算考题工具。当时我也就只是想偷懒,解决自己的计算问题,但是没想到, 同学比我更懒,拿着这份 Excel 开始传播起来。 等我发现全班都在用我的 Excel 时,真是震惊了。我想这就是我开始想要学编程,想要更自由的做出有效工具的萌芽吧。

其实当你也有想解决的数据问题,不管是一份考题,还是工作总结,拥有了这种处理数据的能力后,不光是你自己,就可能连身边的人都会受益于你的能力。

image.png

今天要讲的是 Pandas,是什么时候才会让我想要使用 Pandas 来处理问题呢?我下面列一条,说不定就有你正面临的问题:

办公自动化;

上学上班,有 Excel 或者格式化的文本文件,需要进行数据加工处理;

对大量的这些文本文件作图,想要自动化处理;

人工智能;

数据分析,可视化数据规律;

数据前处理,为 AI 模型展平道路。

Pandas 是什么

Pandas 库是一个免费、开源的第三方 Python 库,是 Python 数据分析 必不可少的工具之一,它为 Python 数据分析提供了高性能,且易于使用的数据结构,即 Series 和 DataFrame。Pandas 自诞生后被应用于众多的领域,比如金融、统计学、社会科学、建筑工程等。

image.png

Pandas 库基于 Python NumPy 库开发而来,因此,它可以与 Python 的科学计算库配合使用。Pandas 提供了两种数据结构,分别是 Series(一维数组结构)与 DataFrame(二维数组结构),这两种数据结构极大地增强的了 Pandas 的数据分析能力。在本套教程中,我们将学习 Python Pandas 的各种方法、特性以及如何在实践中运用它们。

Pandas 这个名字来源于面板数据(Panel Data)与数据分析(data analysis)这两个名词的组合。在经济学中,Panel Data 是一个关于多维数据集的术语

Pandas 最初由 Wes McKinney(韦斯·麦金尼)于 2008 年开发,并于 2009 年实现开源。目前,Pandas 由 PyData 团队进行日常的开发和维护工作。在 2020 年 12 月,PyData 团队公布了最新的 Pandas 1.20 版本 。

在 Pandas 没有出现之前,Python 在数据分析任务中主要承担着数据采集和数据预处理的工作,但是这对数据分析的支持十分有限,并不能突出 Python 简单、易上手的特点。Pandas 的出现使得 Python 做数据分析的能力得到了大幅度提升,它主要实现了数据分析的五个重要环节:

加载数据

整理数据

操作数据

构建数据模型

分析数据

Pandas主要特点

Pandas 主要包括以下几个特点:

它提供了一个简单、高效、带有默认标签(也可以自定义标签)的 DataFrame 对象。

能够快速得从不同格式的文件中加载数据(比如 Excel、CSV 、SQL文件),然后将其转换为可处理的对象;

能够按数据的行、列标签进行分组,并对分组后的对象执行聚合和转换操作;

能够很方便地实现数据归一化操作和缺失值处理;

能够很方便地对 DataFrame 的数据列进行增加、修改或者删除的操作;

能够处理不同格式的数据集,比如矩阵数据、异构数据表、时间序列等;

提供了多种处理数据集的方式,比如构建子集、切片、过滤、分组以及重新排序等。

上述知识点将在后面的教学中为大家一一讲解。

Pandas 的主要优势

与其它语言的数据分析包相比,Pandas 具有以下优势:

Pandas 的 DataFrame 和 Series 构建了适用于数据分析的存储结构;

Pandas 简洁的 API 能够让你专注于代码的核心层面;

Pandas 实现了与其他库的集成,比如 Scipy、scikit-learn 和 Matplotlib;

Pandas 官方网站(点击访问)提供了完善资料支持,及其良好的社区环境。

Pandas内置数据结构

我们知道,构建和处理二维、多维数组是一项繁琐的任务。Pandas 为解决这一问题, 在 ndarray 数组(NumPy 中的数组)的基础上构建出了两种不同的数据结构,分别是 Series(一维数据结构)DataFrame(二维数据结构):

Series 是带标签的一维数组,这里的标签可以理解为索引,但这个索引并不局限于整数,它也可以是字符类型,比如 a、b、c 等;

DataFrame 是一种表格型数据结构,它既有行标签,又有列标签。

下面对上述数据结构做简单地的说明,大家可以参考一下:

image.png

Pandas库下载和安装

Python 官方标准发行版并没有自带 Pandas 库,因此需要另行安装。除了标准发行版外,还有一些第三方机构发布的 Python 免费发行版, 它们在官方版本的基础上开发而来,并有针对性的提前安装了一些 Python 模块,从而满足某些特定领域的需求,比如专门适应于科学计算领域的 Anaconda,它就提前安装了多款适用于科学计算的软件包。

对于第三方发行版而言,它们已经自带 Pandas 库,所以无须另行安装。下面介绍了常用的免费发行版:

1.Anaconda(官网下载:https://www.anaconda.com/)是一个开源的 Python 发行版,包含了 180 多个科学包及其依赖项。除了支持 Windows 系统外,也支持 Linux 和 Mac 系统。

2.Python(x,y)(下载地址:添加链接描述)是一款基于 Python、Qt (图形用户界面)和 Spyder (交互式开发环境)开发的软件,主要用于数值计算、数据分析和数据可视化等工程项目,目前只支持 Python 2 版本。

3.WinPython(下载地址:添加链接描述)一个免费的 Python 发行版,包含了常用的科学计算包与 Spyder IDE,但仅支持 Windows 系统。

下面介绍在不同操作系统环境下,标准发行版安装 Pandas 的方法。

Windows系统安装

使用 pip 包管理器安装 Pandas,是最简单的一种安装方式。在 CMD 命令提示符界面行执行以下命令:

pip install pandas

Linux系统安装

对于不同的版本的 Linux 系统,您可以采用它们各自的包管理器来安装 Pandas。

  1. Ubuntu用户

Pandas 通常需要与其他软件包一起使用,因此可采用以下命令,一次性安装所有包:

sudo apt-get install numpy scipy matplotlib pandas
  1. Fedora用户

对于 Fedora 用户而言,可采用以下命令安装:

sudo yum install numpy scipy matplotlib pandas

MacOSX系统安装

对于 Mac 用户而言,同样可以直接使用 pip 包管理器来安装,命令如下:

pip install pandas

Pandas index操作索引

索引(index)是 Pandas 的重要工具,通过索引可以从 DataFame 中选择特定的行数和列数,这种选择数据的方式称为“子集选择”。

在 Pandas 中,索引值也被称为标签(label),它在 Jupyter 笔记本中以粗体字进行显示。索引可以加快数据访问的速度,它就好比数据的书签,通过它可以实现数据的快速查找。

创建索引

通过示例对 index 索引做进一步讲解。下面创建一个带有 index 索引的数据,并使用 read_csv() 这些读取数据:

import pandas as pd    
data = pd.read_csv("person.csv") 
print(data) 

输出结果:

ID Name Age City Salary

0 1 Jack 28 Beijing 22000

1 2 Lida 32 Shanghai 19000

2 3 John 43 Shenzhen 12000

3 4 Helen 38 Hengshui 3500

通过列索引(标签)读取多列数据:

import pandas as pd  
#设置"Name"为行索引    
data = pd.read_csv("person.csv", index_col ="Name")   
# 通过列标签选取多列数据  
a = data[["City","Salary"]]
print(a)

输出结果:

City Salary

Name

Jack Beijing 22000

Lida Shanghai 19000

John Shenzhen 12000

Helen Hengshui 3500

再看一组简单的示例:

import pandas as pd  
info =pd.read_csv("person.csv", index_col ="Name")
#获取单列数据,或者以列表的形式传入["Salary"] 
a =info["Salary"] 
print(a)

输出结果:

Salary

Name

Jack 22000

Lida 19000

John 12000

Helen 3500

设置索引

set_index() 将已存在的列标签设置为 DataFrame 行索引。除了可以添加索引外,也可以替换已经存在的索引。比如您也可以把 Series 或者一个 DataFrme 设置成另一个 DataFrame 的索引。示例如下:

info = pd.DataFrame({'Name': ['Parker', 'Terry', 'Smith', 'William'],  'Year': [2011, 2009, 2014, 2010], 
'Leaves': [10, 15, 9, 4]})
#设置Name为行索引
print(info.set_index('Name'))

输出结果:

Year Leaves

Name

Parker 2011 10

Terry 2009 15

Smith 2014 9

William 2010 4

重置索引

您可以使用 reset_index() 来恢复初始行索引,示例如下:

import pandas as pd
import numpy as np
info = pd.DataFrame([('William', 'C'), 
('Smith', 'Java'), 
('Parker', 'Python'), 
('Phill', np.nan)], 
index=[1, 2, 3, 4], 
columns=('name', 'Language')) 
print(info)
print(info.reset_index())

输出结果:

重置前:

name Language

1 William C

2 Smith Java

3 Parker Python

4 Phill NaN

重置后:

index name Language

0 1 William C

1 2 Smith Java

2 3 Parker Python

3 4 Phill NaN

Pandas分层索引

分层索引(Multiple Index)是 Pandas 中非常重要的索引类型,它指的是在一个轴上拥有多个(即两个以上)索引层数,这使得我们可以用低维度的结构来处理更高维的数据。比如,当想要处理三维及以上的高维数据时,就需要用到分层索引。

分层索引的目的是用低维度的结构(Series 或者 DataFrame)更好地处理高维数据。通过分层索引,我们可以像处理二维数据一样,处理三维及以上的数据。分层索引的存在使得分析高维数据变得简单,让抽象的高维数据变得容易理解,同时它比废弃的 Panel 结构更容易使用。

Pandas 可以通过 MultiIndex() 方法来创建分层索引对象,该对象本质上是一个元组序列,序列中每一个元组都是唯一的。下面介绍几种创建分层索引的方式。

创建分层索引

  1. 直接创建

通过 MultiIndex() 的levels参数能够直接创建分层索引,示例如下:

import pandas as pd 
import numpy as np 
#为leves传递一个1行5列的二维数组
df=pd.MultiIndex(levels=[[np.nan, 2, pd.NaT, None, 5]], codes=[[4, -1, 1, 2, 3, 4]]) 
print(df.levels)
print(df)

输出结果:

[[nan, 2, NaT, None, 5]]

MultiIndex([( 5,),

(nan,),

( 2,),

(nan,),

(nan,),

( 5,)],

)

上述代码中,levels参数用来创建层级索引,这里只有一层,该层的索引值分别是 np.nan, 2, NaT, None, 5;codes表示按参数值对层级索引值排序(与 levels 中的值相对应),也就说 codes 中数值是 leves 序列的下标索引。需要注意,这里的 -1 代表 NaN。

  1. 从元组创建

通过 from_tuples() 实现从元组创建分层索引。

#创建元组序列
arrays = [['it', 'it', 'of', 'of', 'for', 'for', 'then', 'then'], 
['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] 
#使用zip()函数创建元组
tuples = list(zip(*arrays)) 
print(tuples)

输出结果如下:

[(‘it’, ‘one’),

(‘it’, ‘two’),

(‘of’, ‘one’),

(‘of’, ‘two’),

(‘for’, ‘one’),

(‘for’, ‘two’),

(‘then’, ‘one’),

(‘then’, ‘two’)]

然后使用 tuples 创建分层索引,如下所示:

import pandas as pd
#创建了两层索引,并使用names对它们命名 
index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])
print(index)

输出结果:

MultiIndex([( ‘it’, ‘one’),

( ‘it’, ‘two’),

( ‘of’, ‘one’),

( ‘of’, ‘two’),

( ‘for’, ‘one’),

( ‘for’, ‘two’),

(‘then’, ‘one’),

(‘then’, ‘two’)],

names=[‘first’, ‘second’])

相关实践学习
简单用户画像分析
本场景主要介绍基于海量日志数据进行简单用户画像分析为背景,如何通过使用DataWorks完成数据采集 、加工数据、配置数据质量监控和数据可视化展现等任务。
SaaS 模式云数据仓库必修课
本课程由阿里云开发者社区和阿里云大数据团队共同出品,是SaaS模式云原生数据仓库领导者MaxCompute核心课程。本课程由阿里云资深产品和技术专家们从概念到方法,从场景到实践,体系化的将阿里巴巴飞天大数据平台10多年的经过验证的方法与实践深入浅出的讲给开发者们。帮助大数据开发者快速了解并掌握SaaS模式的云原生的数据仓库,助力开发者学习了解先进的技术栈,并能在实际业务中敏捷的进行大数据分析,赋能企业业务。 通过本课程可以了解SaaS模式云原生数据仓库领导者MaxCompute核心功能及典型适用场景,可应用MaxCompute实现数仓搭建,快速进行大数据分析。适合大数据工程师、大数据分析师 大量数据需要处理、存储和管理,需要搭建数据仓库?学它! 没有足够人员和经验来运维大数据平台,不想自建IDC买机器,需要免运维的大数据平台?会SQL就等于会大数据?学它! 想知道大数据用得对不对,想用更少的钱得到持续演进的数仓能力?获得极致弹性的计算资源和更好的性能,以及持续保护数据安全的生产环境?学它! 想要获得灵活的分析能力,快速洞察数据规律特征?想要兼得数据湖的灵活性与数据仓库的成长性?学它! 出品人:阿里云大数据产品及研发团队专家 产品 MaxCompute 官网 https://www.aliyun.com/product/odps 
相关文章
|
3月前
|
索引 Python
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
45 1
Python 教程之 Pandas(5)—— Pandas 中的布尔索引
|
4月前
|
索引 Python
Pandas 高级教程——高级时间序列分析
Pandas 高级教程——高级时间序列分析
93 4
|
3月前
|
索引 Python
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
33 0
Python 教程之 Pandas(11)—— 索引和选择 series 的数据
|
3月前
|
索引 Python
Python 教程之 Pandas(10)—— 访问 series 的元素
Python 教程之 Pandas(10)—— 访问 series 的元素
45 0
Python 教程之 Pandas(10)—— 访问 series 的元素
|
3月前
|
存储 SQL 索引
Python 教程之 Pandas(9)—— 创建 Pandas Series
Python 教程之 Pandas(9)—— 创建 Pandas Series
41 0
Python 教程之 Pandas(9)—— 创建 Pandas Series
|
3月前
|
索引 Python
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
62 1
Python 教程之 Pandas(4)—— 使用 Pandas 索引和选择数据
|
3月前
|
数据挖掘 索引 Python
Python 教程之 Pandas(15)—— 使用 pandas.read_csv() 读取 csv
Python 教程之 Pandas(15)—— 使用 pandas.read_csv() 读取 csv
37 0
|
3月前
|
存储 数据挖掘 索引
Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
26 0
Python 教程之 Pandas(14)—— 使用 Pandas 进行数据分析
|
3月前
|
索引 Python
Python 教程之 Pandas(13)—— series 上的转换操作
Python 教程之 Pandas(13)—— series 上的转换操作
43 0
Python 教程之 Pandas(13)—— series 上的转换操作
|
3月前
|
Python
Python 教程之 Pandas(12)—— series 的二元运算
Python 教程之 Pandas(12)—— series 的二元运算
21 0
Python 教程之 Pandas(12)—— series 的二元运算

相关实验场景

更多