Pandas
pandas 是基于 NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。
pandas基础
pandas介绍
Python Data Analysis Library
pandas是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入 了大量库和一些标准的数据模型,提供了高效地操作大型结构化数据集所需的工具。
pandas核心数据结构
数据结构是计算机存储、组织数据的方式。 通常情况下,精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
Series
Series可以理解为一个一维的数组,只是index名称可以自己改动。类似于定长的有序字典,有Index和 value。
1 | import pandas as pd |
访问Series中的数据:
1 | # 使用索引检索元素 |
pandas日期处理
1 | # pandas识别的日期字符串格式 |
Series.dt提供了很多日期相关操作,如下:
1 | Series.dt.year The year of the datetime. |
DateTimeIndex
通过指定周期和频率,使用date.range()
函数就可以创建日期序列。 默认情况下,范围的频率是天。
1 | import pandas as pd |
bdate_range()
用来表示商业日期范围,不同于date_range()
,它不包括星期六和星期天。
1 | import pandas as pd |
DataFrame
DataFrame是一个类似于表格的数据类型,可以理解为一个二维数组,索引有两个维度,可更改。DataFrame具有以下特点:
- 潜在的列是不同的类型
- 大小可变
- 标记轴(行和列)
- 可以对行和列执行算术运算
1 | import pandas as pd |
核心数据结构操作
列访问
DataFrame的单列数据为一个Series。根据DataFrame的定义可以 知晓DataFrame是一个带有标签的二维数组,每个标签相当每一列的列名。
1 | import pandas as pd |
列添加
DataFrame添加一列的方法非常简单,只需要新建一个列索引。并对该索引下的数据进行赋值操作即可。
1 | import pandas as pd |
列删除
删除某列数据需要用到pandas提供的方法pop,pop方法的用法如下:
1 | import pandas as pd |
行访问
如果只是需要访问DataFrame某几行数据的实现方式则采用数组的选取方式,使用 “:” 即可:
1 | import pandas as pd |
loc方法是针对DataFrame索引名称的切片方法。loc方法使用方法如下:
1 | import pandas as pd |
iloc和loc区别是iloc接收的必须是行索引和列索引的位置。iloc方法的使用方法如下:
1 | import pandas as pd |
行添加
1 | import pandas as pd |
行删除
使用索引标签从DataFrame中删除或删除行。 如果标签重复,则会删除多行。
1 | import pandas as pd |
修改DataFrame中的数据
更改DataFrame中的数据,原理是将这部分数据提取出来,重新赋值为新的数据。
1 | import pandas as pd |
DataFrame常用属性
编号 | 属性或方法 | 描述 |
---|---|---|
1 | axes |
返回 行/列 标签(index)列表。 |
2 | dtype |
返回对象的数据类型(dtype )。 |
3 | empty |
如果系列为空,则返回True 。 |
4 | ndim |
返回底层数据的维数,默认定义:1 。 |
5 | size |
返回基础数据中的元素数。 |
6 | values |
将系列作为ndarray 返回。 |
7 | head() |
返回前n 行。 |
8 | tail() |
返回最后n 行。 |
实例代码:
1 | import pandas as pd |
Jupyter notebook
Jupyter Notebook(此前被称为 IPython notebook)是一个交互式笔记本,支持运行 40 多种编程语言。使用浏览器作为界面,向后台的IPython服务器发送请求,并显示结果。 Jupyter Notebook 的本质是一个 Web 应用程序,便于创建和共享文学化程序文档,支持实时代码,数学方程,可视化和 markdown。
IPython 是一个 python 的交互式 shell,比默认的python shell 好用得多,支持变量自动补全,自动缩进,支持 bash shell 命令,内置了许多很有用的功能和函数。
安装ipython
windows: 前提是有numpy,matplotlib pandas
采用pip安装 pip install ipython
OS X: AppStore下载安装苹果开发工具Xcode。
使用easy_install或pip安装IPython,或者从源文件安装。
安装Jupyter notebook
1 | pip3 install jupyter |
pandas核心
pandas描述性统计
数值型数据的描述性统计主要包括了计算数值型数据的完整情况、最小值、均值、中位 数、最大值、四分位数、极差、标准差、方差、协方差等。在NumPy库中一些常用的统计学函数也可用于对数据框进行描述性统计。
1 | np.min 最小值 |
实例:
1 | import pandas as pd |
pandas提供了统计相关函数:
1 | count() |
非空观测数量 |
---|---|---|
2 | sum() |
所有值之和 |
3 | mean() |
所有值的平均值 |
4 | median() |
所有值的中位数 |
5 | std() |
值的标准偏差 |
6 | min() |
所有值中的最小值 |
7 | max() |
所有值中的最大值 |
8 | abs() |
绝对值 |
9 | prod() |
数组元素的乘积 |
10 | cumsum() |
累计总和 |
11 | cumprod() |
累计乘积 |
pandas还提供了一个方法叫作describe,能够一次性得出数据框所有数值型特征的非空值数目、均值、标准差等。
1 | import pandas as pd |
pandas排序
Pandas有两种排序方式,它们分别是按标签与按实际值排序。
1 | import pandas as pd |
按行标签排序
使用sort_index()
方法,通过传递axis
参数和排序顺序,可以对DataFrame
进行排序。 默认情况下,按照升序对行标签进行排序。
1 | import pandas as pd |
按列标签排序
1 | import numpy as np |
按某列值排序
像索引排序一样,sort_values()
是按值排序的方法。它接受一个by
参数,它将使用要与其排序值的DataFrame
的列名称。
1 | import pandas as pd |
pandas分组
在许多情况下,我们将数据分成多个集合,并在每个子集上应用一些函数。在应用函数中,可以执行以下操作 :
- 聚合 - 计算汇总统计
- 转换 - 执行一些特定于组的操作
- 过滤 - 在某些情况下丢弃数据
1 | import pandas as pd |
将数据拆分成组
1 | # 按照年份Year字段分组 |
迭代遍历分组
groupby返回可迭代对象,可以使用for循环遍历:
1 | grouped = df.groupby('Year') |
获得一个分组细节
1 | grouped = df.groupby('Year') |
分组聚合
聚合函数为每个组返回聚合值。当创建了分组(group by)对象,就可以对每个分组数据执行求和、求标准差等操作。
1 | # 聚合每一年的平均的分 |
pandas数据表关联操作
Pandas具有功能全面的高性能内存中连接操作,与SQL等关系数据库非常相似。
Pandas提供了一个单独的merge()
函数,作为DataFrame对象之间所有标准数据库连接操作的入口。
合并两个DataFrame:
1 | import pandas as pd |
使用“how”参数合并DataFrame:
1 | # 合并两个DataFrame (左连接) |
其他合并方法同数据库相同:
合并方法 | SQL等效 | 描述 |
---|---|---|
left |
LEFT OUTER JOIN |
使用左侧对象的键 |
right |
RIGHT OUTER JOIN |
使用右侧对象的键 |
outer |
FULL OUTER JOIN |
使用键的联合 |
inner |
INNER JOIN |
使用键的交集 |
试验:
1 | # 合并两个DataFrame (左连接) |
pandas透视表与交叉表
有如下数据:
1 | import pandas as pd |
透视表
透视表(pivot table)是各种电子表格程序和其他数据分析软件中一种常见的数据汇总工具。它根据一个或多个键对数据进行分组聚合,并根据每个分组进行数据汇总。
1 | # 以class_id与gender做分组汇总数据,默认聚合统计所有列 |
交叉表
交叉表(cross-tabulation, 简称crosstab)是一种用于计算分组频率的特殊透视表:
1 | # 按照class_id分组,针对不同的gender,统计数量 |
pandas可视化
基本绘图:绘图
1 | import pandas as pd |
plot方法允许除默认线图之外的少数绘图样式。 这些方法可以作为plot()
的kind
关键字参数。这些包括 :
bar
或barh
为条形hist
为直方图scatter
为散点图
条形图
1 | df = pd.DataFrame(np.random.rand(10,4),columns=['a','b','c','d']) |
直方图
1 | df = pd.DataFrame() |
散点图
1 | df = pd.DataFrame(np.random.rand(50, 4), columns=['a', 'b', 'c', 'd']) |
饼状图
1 | df = pd.DataFrame(3 * np.random.rand(4), index=['a', 'b', 'c', 'd'], columns=['x']) |
数据读取与存储
读取与存储csv:
1 | # filepath 文件路径。该字符串可以是一个URL。有效的URL方案包括http,ftp和file |
1 | DataFrame.to_csv(excel_writer=None, sheetname=None, header=True, index=True, index_label=None, mode=’w’, encoding=None) |
读取与存储excel:
1 | # io 表示文件路径。 |
1 | DataFrame.to_excel(excel_writer=None, sheetname=None, header=True, index=True, index_label=None, mode=’w’, encoding=None) |
读取与存储JSON:
1 | # 通过json模块转换为字典,再转换为DataFrame |
movielens电影评分数据分析
需求如下:
读取数据,从用户表读取用户信息、同样方法,导入电影评分表、电影数据表。
合并数据表
对数据初步描述分析
查看每一部电影不同性别的平均评分并计算分歧差值,之后排序
算出每部电影平均得分并对其进行排序
查看评分次数多的电影并进行排序
过滤掉评分条目数不足250条的电影
评分最高的十部电影
查看不同年龄的分布情况并且采用直方图进行可视化
在原数据中标记出用户位于的年龄分组
可视化显示movies_ratings中不同类型电影的频数