学Python怎么能不会数据分析?(Pandas超详解)

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了学Python怎么能不会数据分析?(Pandas超详解)相关的知识,希望对你有一定的参考价值。

Pandas 是基于 Numpy 的一套数据分析工具,该工具是为了解决数据分析任务而创建的。
Pandas 纳入了大量标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas 提供了大量能使我们快速便捷地处理数据的函数和方法。它是使 Python 成为强大而高效的数据分析环境的重要因素之一。

Pandas 开发环境搭建

Pandas 是第三方程序库,所以在使用 Pandas 之前必须安装 Pandas 库。但是如果使用 Anaconda Python 开发环境,那么 Pandas 已经集成到 Anaconda 环境中,不需要再安装。

Anaconda 下载和安装

Anaconda 已经自动的安装了 Jupter Notebook 及其他工具,还有 python 中超过 180 个科学包及其依赖项。现在就看一下 Anaconda 的具体安装流程。

  1. 进入官网 Link 单击 Download 按钮
  2. 根据电脑系统类型及 Python 环境下载对应版本,因为在 2020 年之后官方就不再支持 Python2 了,所以建议大家选择Python3,然后根据电脑的操作系统位数(32Bit/64Bit)选择对应版本
  3. 下载后保存到电脑里,双击安装包打开后进行安装。
  4. 选择用户 (Just for me)、选择安装路径,不需要添加环境变量,然后点击 Next 按钮,并在弹出的对话框中勾选相应选项即可。
  5. 完成上述操作后,开始界面就会看到新添加的程序,这就表示 Anoconda 安装好了。单击 Jupyter Notebook 打开,会弹出一个黑框,按 Enter 键后会让你选择哪个浏览器打开,建议选择 Chrome 浏览器。

具体安装步骤参考上篇博文 Tensorflow2.0安装教程

Jupyter Notebook

简介

Jupyter Notebook 是基于网页的用于交互计算的应用程序。其可被应用于全过程计算:开发、文档编写、运行代码和展示结果。
——Jupyter Notebook官方介绍

组成部分

  • 网页应用

网页应用即基于网页形式的、结合了编写说明文档、数学公式、交互计算和其他富媒体形式的工具。简言之,网页应用是可以实现各种功能的工具。

  • 文档

JupyterNotebook中所有交互计算、编写说明文档、数学公式、图片以及其他富媒体形式的输入和输出,都是以文档的形式体现的。

这些文档是保存为后缀名为.ipynb的JSON格式文件,不仅便于版本控制,也方便与他人共享。
此外,文档还可以导出为:html、LaTeX、PDF等格式。

主要特点

  1. 编程时具有语法高亮、缩进、tab补全的功能。

  2. 可直接通过浏览器运行代码,同时在代码块下方展示运行结果。

  3. 以富媒体格式展示计算结果。富媒体格式包括:HTML,LaTeX,PNG,SVG等。

  4. 对代码编写说明文档或语句时,支持Markdown语法。

  5. 支持使用 LaTeX 编写数学性说明。

新建 Jupyter Notebook 文件

打开 Jupyter Notebook 后单击右上角的 New 按钮,在下拉列表中选择 Python3 选项来创建一个 Python 文件

在这里插入图片描述

常用快捷键

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运行第一段代码

在下图的代码框中输入 print(“hello Python”),然后单击 Run 按钮,或者按 Ctrl+Enter 组合键,就会输出hello Python,这就表示你的第一段代码运行成功。
当你想换一个代码框 输入代码时,你可以通过单击左上角的“+”按钮来新增代码框。

在这里插入图片描述

重命名 Jupyter Notebook 文件

当新建一个 Jupyter Notebook 文件时,该文件名默认为 Untitled(类似于 Excel 中的工作簿),可以单 File→Rename 对该文件进行重命名

保存 Jupyter Notebook 文件

保存文件有两种方式:

1.单击 File→Save and Checkpoint 保存文件,但是这种方法会将文件保存到默认路径下, 且文件默认格式为
ipynb,ipynb 是 Jupyter Notebook 的专属文件格式。

2.选择 Download as 选项对文件进行保存,它相当于 Excel 中的“另存为”,可以自己选择保存路径及保存格式

Jupyter Notebook 工作目录更改

请参考:Jupyter Notebook修改默认的工作目录

Pandas 数据类型

Pandas 中两个重要的数据类型:Series 和 DataFrame。

1.Series 表示数据列表
2.DataFrame 表示二维数据集

Series 对象创建

使用列表创建 Series 对象

# 导入pandas库
import pandas as pd
# 使用列表创建
data = pd.Series([11, 22, 33, 44])

在这里插入图片描述

series 对象包装的是 numpy 中的一维数组,实际上是将一个一维数组与一个索引名称捆绑在一起了。

属性 values 和 index

pandas 中两个重要的属性
values 和 index,values 是 Series 对象的原始数据。index 对应了 Series 对象的索引对象。

# 获取values
data.values
# 获取index
data.index

在这里插入图片描述

创建 Series 对象时候,指定 index 属性

# 创建Series对象是指定index,个数必须一样
data = pd.Series([1, 2, 3, 4,  5], index=['a', 'b', 'c', 'd', 'e'])

在这里插入图片描述

创建 Series 对象时候,使用 list 列表指定 index 属性

# 创建Series对象是指定index=可迭代的字符串对象
data = pd.Series([11, 22, 33, 44], index=list('abcd'))

在这里插入图片描述

使用字典创建 Series 对象,默认将 key 作为 index 属性

# 使用字典创建对象
p_dict = {'a':10, 'b':10, 'c':20}
p_series = pd.Series(p_dict)

在这里插入图片描述
使用字典创建 Series 对象,又指定了 index 属性值,如果 key 不存在,则值为 NaN

在这里插入图片描述

标量与 index 属性创建 Series

# 标量创建
data = pd.Series(20, index=list('abcd'))

在这里插入图片描述

DataFrame 对象创建

将两个 series 对象作为字典的值,就可以创建一个 DataFrame 对象。

创建 DataFrame 对象

# 将两个series对象作为字典的值创建DataFrame对象
population_dict = {'bj':2900, 'gd':3100, 'sh':3400}
area_dict = {'bj':210, 'gz':260, 'sh':270}

# 创建Series对象
population_series = pd.Series(population_dict)
area_series = pd.Series(area_dict)

# 创建DataFrame对象
data = pd.DataFrame({'area':area_series, 'population':population_series})

在这里插入图片描述

将两个具有共同 key 的 Series 一维数组对象,整合为二维矩阵,每一个对象 按列存储

属性 values、index 和 columns

citys.index 
citys.values 
citys.columns

在这里插入图片描述
values:获取每一行数据
index:获取行名
columns:获取列名

使用列表创建 DataFrame 对象

population_dict={'beijing':3000,'shanghai':1200,'guangzhou':1800} 
area_dict={'beijing':300,'shanghai':180,'guangzhou':200} 
data=pd.DataFrame([population_dict,area_dict]) 
print(data) #将‘beijing’ ‘shanghai’ ‘guangzhou’作为表头

在这里插入图片描述
每一个列表作为一行,共同的键作为列名

创建 DataFrame 对象 指定 index 属性

# 设置行索引 index
data = pd.DataFrame([area_dict, population_dict], index=['area', 'population'])

在这里插入图片描述

直接传入Series

data = pd.DataFrame(population_series)

在这里插入图片描述
指定列索引 使用columns属性

data = pd.DataFrame(population_series, columns=['population'])

在这里插入图片描述

使用列表创建 Dataframe 对象

data_dict = [{'a': i, 'b': i*2} for i in range(3)]
data = pd.DataFrame(data_dict, index=['A', 'B', 'C'])

在这里插入图片描述
字典按行存储
[{'a': i, 'b': i*2} for i in range(3)]

使用一个二维数组并指定 columns 和 index 创建 DataFrame 对象

# 传入二维数组,指定columns 和 index
pd.DataFrame(np.random.randint(0, 10, (3, 3)), columns=list('abc'), index=list('ABC'))

在这里插入图片描述

获取 Series 对象的值

Series 对象的切片、索引

import pandas as pd
# 创建Series对象
data = pd.Series([10, 20, 30, 40, 50], index=list('abcde'))  # 指定行索引

在这里插入图片描述

# 指定的索引叫 标签索引,默认的索引 叫 位置索引
# 根据索引获取值
#1.根据标签索引获取
#2.根据位置索引获取
# 获取索引:30
# 根据标签索引获取
data['c']

在这里插入图片描述
位置索引切片 [start:end)

# 切片
# 位置索引切片  [start:end)
# 获取10,20,30
data[0:2]

在这里插入图片描述
标签索引 [左闭,右闭]

# 标签索引 [左闭,右闭]
# 获取10 20 30
data['a': 'c']

在这里插入图片描述
切片中step

# 切片中step
# 例如 获取10 30
# 位置索引
data[0:3:2]

在这里插入图片描述

在这里插入图片描述
可以看出 Series 与 ndarray 数组都可以通过索引访问元素,Series 对象的索引分为位置索引和标签索引。不同之处,标签索引进行切片时候是左闭右闭,而位置索引是左闭右开。

位置索引与标签索引相同的问题

位置索引和标签索引有相同的时候,是根据标签索引获取的
在这里插入图片描述
如:

data=pd.Series([5,6,7,8],index=[1,2,3,4]) 
data[1]

位置索引与标签索引有相同值 1,这时候 data[1]就不知道是按哪个来获取,此时要使用 lociloc。其中 loc 表示的是标签索引,iloc 表示的是位置索引。

Series 对象中 loc 与 iloc 的使用

loc 根据标签索引获取
iloc 根据位置索引获取

在这里插入图片描述

获取 DataFrame 的值

选择某一列/某几列

DataFrame 对象非常容易获取数据集中指定列的数据。只需要在表 df 后面的括号中指明 要选择的列名即可。如果要获取一列,则只需要传入一个列名;如果是同时选择多列,则传 入多个列名即可,多个列名用一个 list 存放。

创建 DataFrame 对象

import numpy as np import pandas as pd 
data=pd.DataFrame(np.arange(12).reshape(3,4),index=list('abc'),columns=list('ABCD'))

在这里插入图片描述
获取 DataFrame 对象中某一列/某几列

print('获取‘B’列:') 
print(data['B']) 
print('获取‘A’‘C’两列:') 
print(data[['A','C']])

在这里插入图片描述
DataFrame 对象获取列,除了传入具体的列名,还可以传入具体列的位置,通过传入位置来获取数据时需要用到 iloc 方法。

位置获取某一列/某几列

通过传入位置获取 DataFrame 对象中某一列/某几列:

print('获取第 1 列:') 
print(data.iloc[:,0]) 
print('获取第 1 列和第 3 列:') 
print(data.iloc[:,[0,2]])

在这里插入图片描述
从上面的示例中可以看到,iloc 后的方括号中逗号之前的部分表示要获取的行的位置。 只输入一个冒号,不输入任何数值表示获取所有的行;逗号之后的方括号表示要获取的列的位置,列的位置同样也是从 0 开始计数。

选择连续的某几列

我们将通过列名选择数据的方式叫做普通索引,传入列的位置选择数据的方式叫做位置索引。获取连续的某几列,用普通索引和位置索引都可以做到。因为要获取的列是连续的, 所以直接对列进行切片。

获取 DataFrame 对象中连续几列

print('获取 B C D 三列,使用普通索引获取:') 
print(data.loc[:,'B':'D']) 
print('获取 B C D 三列,使用位置索引获取:') 
print(data.iloc[:,1:4])

在这里插入图片描述
从上面的示例可以看到,loc 和 iloc 后的方括号中逗号之前的表示选择的行,当只传入 一个冒号时,表示选择所有行,逗号后面表示要选择列。

data.loc[:,‘B’:‘D’]表示选择从 B 列开始到 D 列之间的值(包括 B 列也包括 D 列),data.iloc[:,1:4]表示选择第 2 列到第 5 列之间的值(包括第 1 列但不包括第 5 列)。

选择某一行/某几行

获取行的方式主要有两种,一种是普通索引,即传入具体行索引的名称,需要用到 loc 方法;另外一种是位置索引,即传入具体的行数,需要用到 iloc 方法。

DataFrame 对象中选择某一行/某几行

print('获取 a 行,普通索引获取:') 
print(data.loc['a']) 
print('获取 a c 行,普通索引获取:') 
print(data.loc[['a','c']]) 
print('获取第 1 行,位置索引获取:') 
print(data.iloc[0]) 
print('获取第 1 行第 3 行,位置索引获取:') 
print(data.iloc[[0,2]])

在这里插入图片描述

选择连续的某几行

选择连续的某几行和选择连续某几列类似,只要把连续行的位置用一个区间表示即可。

DataFrame 对象中选择某一行/某几行

print('选择 a 行 b 行,使用普通索引:') 
print(data.loc['a':'b']) 
print('选择第 1 行 第 2 行,使用位置索引:') 
print(data.iloc[0:2])

在这里插入图片描述

行列同时选择

同时选择连续的部分行和部分列

print('同时获取 a b 行,A B 列,使用普通索引:') 
print(data.loc['a':'b','A':'B']) 
print('同时获取 a b 行,A B 列,使用位置索引:') 
print(data.iloc[0:2,0:2])

在这里插入图片描述
同时选择不连续的部分行和部分列

print('同时获取 a c 行,ABD 列,使用普通索引:') 
print(data.loc[['a','c'],['A','B','D']]) 
print('同时获取 a c 行,ABD 列,使用位置索引:') 
print(data.iloc[[0,2],[0,1,3]])

在这里插入图片描述

Series 的方法

Series 对象中有很多常用的方法可以对数据进行各种处理。例如,mean 方法可以对某 一列数据取平均数,min 方法获取最小值,max 方法获取最大值,std 方法获取标准差。

使用 mean、min、max、std 等方法对数据集进行各种运算,最后对数据集进行排序操作

import pandas as pd 
data = pd.DataFrame({ 'Name':['zs','lisi','ww'], 'Sno':['1001','1002','1003'], 'Sex':['man','woman','man'], 'Age':[17,18,19], 'Score':[80,97,95] },columns=['Sno','Sex','Age','Score'],index=['zs','lisi','ww']) 
display('数据集',data) 
ages = data['Age'] 
display('获取数据集中 Age 列的所有',ages) 
print('计算 Age 列的平均值:',ages.mean()) 
print('计算 Age 列的最大值:',ages.max()) 
print('计算 Age 列的最小值:',ages.min()) 
print('计算 Age 列的标准差:',ages.std()) 
display('对 Age 进行降序排序:',ages.sort_values(ascending=False))

在这里插入图片描述

Series 的条件过滤

Series 对象也可以像 SQL 语句一样,通过指定条件来过滤数据。

import pandas as pd 
data = pd.DataFrame({ 'Name':['zs','lisi','ww'], 'Sno':['1001','1002','1003'], 'Sex':['man','woman','man'], 'Age':[17,18,19],'Score':[80,97,95] },columns=['Sno','Sex'以上是关于学Python怎么能不会数据分析?(Pandas超详解)的主要内容,如果未能解决你的问题,请参考以下文章

肝帝一周总结:全网最全最细十万字python教程,学不会找我!教到你会为止!!内容超多,建议收藏慢慢看!

Python安装与环境配置,超详细保姆级教程,学不会退出IT圈

Python Pandas库教程(超详细)

小白学 Python 数据分析(11):Pandas 数据分组

小白学 Python 数据分析(10):Pandas 数据运算

小白学 Python 数据分析(14):Pandas (十三)数据导出