Python-3.数据分析Pandas使用
条评论Pandas官方定义: pandas is a fast, powerful, flexible and easy to use open source data analysis and manipulation tool, built on top of the Python programming language.
Pandas是Python数据分析必备工具,实现数据分析的五个重要环节:
- 加载数据
- 整理数据
- 操作数据
- 构建数据模型
- 分析数据
Pandas介绍
Pandas主要特点
- 提供DataFrame对象。
- 从不同格式(Excel/CSV/SQL)文件中加载数据,转换为可处理对象。
- 按照数据行、列标签进行分组,对分组后的对象进行聚合和转换操作。
- 数据归一化和缺失值处理。
- 对DataFrame数据的列进行增、删、改操作。
- 处理不同格式数据集,如矩阵数据、异构数据表、时间序列。
- 可构建子集、切片、过滤、分组以及重新排序操作。
Pandas内置数据结构
数据类型 | 维度 | 说明 |
---|---|---|
Series | 一维 | 可存储各种数据类型,比如字符数、整数、浮点数、对象等,Series 用index和value属性来描述数据值 |
DataFrame | 二维 | 二维表格型数据结构,包括行索引(index)和列索引(columns),创建时,可指定相应索引值。 |
Series对象
创建Series对象
1 | ''' |
1 | import pandas as pd |
读取Series数据
Series属性
attribute | description |
---|---|
axes | 一维以列表的形式返回所有行索引标签。 |
dtype | 返回对象的数据类型。 |
empty | 返回一个布尔值,用于判断数据对象是否为空。 |
ndim | 返回Series的维数,Series始终为1。 |
size | 返回Series对象大小,元素数量 |
values | 以 ndarray 的形式返回 Series 对象。 |
index | 返回一个RangeIndex对象,用来描述索引的取值范围。 |
1 | import pandas as pd |
method | description | method | description |
---|---|---|---|
head() | 返回前n行数据,默认显示前5行 | isnull() | 如果为值不存在或者缺失,则返回True |
tail() | 返回后n行数据,默认显示后5行 | notnull() | 如果值不存在或者缺失,则返回 False |
1 | import pandas as pd |
DataFrame对象
创建DataFrame数据
1 | ''' |
1 | import pandas as pd |
读取DataFrame数据
1 | import pandas as pd |
DataFrame属性和方法
attr&method | desc | attr&method | desc |
---|---|---|---|
T | 行和列转置 | head() | 返回前n行数据 |
axes | 返回行、列标签组成的列表 | tail() | 返回后n行数据 |
dtypes | 返回每一列的数据类型 | shift() | 将行/列移动指定的步幅长度 |
empty | 返回数据对象是否为空,True为空 | insert() | 插入新的列 |
ndim | 数组的维数,DataFrame为2 | del()/pop() | 删除列 |
shape | 返回DataFrame形状,行列元组 | append() | 插入新的行 |
size | 返回DataFrame中的元素数量 | drop() | 删除行 |
values | 使用numpy数组表示DF中的元素值 | - | - |
Pandas读CSV文件
pd.read_csv(file_path_or_buffer, sep, header, names, index_col)
method | desc |
---|---|
filepath_or_buffer | 文件路径 |
sep | 列之间的分隔符。read_csv()默认为为’,’ |
header | 默认将首行设为列名。header=None 时应手动给出列名。 |
names | header=None 时设置此字段使用列表初始化列名。 |
index_col | 将某一列作为行级索引。若使用列表,则设置复合索引。 |
usecols | 选择读取文件中的某些列。设置为为相应列的索引列表。 |
skiprows | 跳过行。可选择跳过前n行或给出跳过的行索引列表。 |
encoding | 编码。 |
1 | import pandas as pd |
参考:www.runoob.com ,以nba.csv为例。
CSV文件(逗号分隔符文件,数据与数据之间使用逗号分隔):
pandas读取CSV文件:
Pandas写CSV文件
df.to_csv()
method | desc |
---|---|
filepath_or_buffer | 文件路径 |
sep | 列之间的分隔符。默认为’,’ |
na_rep | 写入文件时dataFrame中缺失值的内容。默认空字符串。 |
columns | 定义需要写入文件的列。 |
header | 是否需要写入表头。默认为True。 |
index | 会否需要写入行索引。默认为True。 |
encoding | 编码。 |
Pandas常用统计方法
Series统计函数
func | desc | func | desc |
---|---|---|---|
pct_change() | 百分比变化 | rank() | 排名 |
cov() | 协方差 | corr() | 相关系数,pearson(default)、spearman()、kendall() |
DataFrame统计函数
func | desc | func | desc |
---|---|---|---|
count() | 统计某个非空值的数量 | min() | 求最小值 |
sum() | 求和 | max() | 求最大值 |
mean() | 求平均值 | average() | 加权平均值 |
median() | 求中位数 | prod() | 求所有数值的乘积 |
mode() | 求众数 | cumsum() | 计算累加和 |
std() | 求标准差 | cumprod() | 计算累计积 |
corr() | 计算数列或变量之间的相关系数 | abs() | 求绝对值 |
使用聚合类方法时需要指定轴(axis)参数,两种传参方式:
- 对行操作,默认使用 axis=0 或者使用 “index”, axis=0 表示按垂直方向进行计算;
- 对列操作,默认使用 axis=1 或者使用 “columns”,axis=1 则表示按水平方向进行计算。
Pandas数据合并
1 | ''' |
1 | import pandas as pd |
Pandas数据分组聚合
跟SQL GROUP BY类似。对DataFrame对象进行分组操作。
1 | import pandas as pd |
按照nba.csv的Team进行分组。可分成30只队伍。
遍历分组数据:
Pandas数据清洗
空数据包含四种:
- n/a
- NA
- na
1 | ''' |
Pandas时间序列
时间序列(time series),由时间构成的序列。
时间序列频率
alias | desc | alias | desc | alias | desc | alias | desc |
---|---|---|---|---|---|---|---|
B | 工作日频率 | MS | 月开始频率 | BQS | 工作季度开始频率 | T,min | 每分钟频率 |
D | 日历日频率 | SMS | 半月开始频率 | A | 年终频率 | S | 每秒钟频率 |
W | 每周频率 | BMS | 工作月开始频率 | BA | 工作年度结束频率 | L,ms | 毫秒 |
M | 月末频率 | Q | 季末频率 | BAS | 工作年度开始频率 | U,us | 微妙 |
SM | 半月结束频率 | BQ | 工作季度结束频率 | BH | 营业时间频率 | N | 纳秒 |
BM | 工作月结束频率 | QS | 季度开始频率 | H | 小时频率 | — | — |
创建时间范围
1 | import pandas as pd |
转化为时间戳
1 | import pandas as pd |
创建时间周期
1 | import pandas as pd |
Pandas核心操作
操作 | 使用 |
---|---|
读取CSV格式的数据集 | pd.read_csv("csv_file") |
读取Excel数据集 | pd.read_excel("excel_file") |
将DF直接写入CSV文件 | df.to_csv("data.csv", sep=",", index=False) |
基本的数据集特征信息 | df.info() |
基本的数据集统计信息 | print(df.describe()) |
将DF输出到一张表 | print(tabulate(print_table, headers=headers)) |
列出所有列的名字 | df.columns |
删除缺失数据 | df.dropna(axis=0, how='any') |
替换缺失数据 | df.replace(to_replace=None, value=None) |
检查空值 NaN | pd.isnull(object) |
删除特征 | df.drop('feature_variable_name', axis=1) |
将目标类型转换为浮点型 | pd.to_numeric(df["feature_name"], errors='coerce') |
将DF转换为NumPy数组 | df.as_matrix() |
取DataFrame的前面n行 | df.head(n) |
通过特征名取数据 | df.loc[feature_name] |
对DataFrame使用函数 | df["height"].apply(*lambda* height: 2 * height) |
重命名行 | df.rename(columns = {df.columns[2]:'size'}, inplace=True) |
取某一行的唯一实体 | df["name"].unique() |
访问子DataFrame | new_df = df[["name", "size"]] |
总结数据信息 | df.sum()/df.min()/df.max()/df.mean()/df.median() |
给数据排序 | df.sort_values(ascending = False) |
布尔型索引 | df[df["size"] == 5] |
选定特定的值 | df.loc([0], ['size']) |