-
Pandas的安装
在cmd输入pip install pandas
导入方式:import pandas as pd
-
Pandas的简介
Pandas是基于Numpy的一种工具,提供了高性能矩阵的运算,该工具是为了解决数据分析任务而创建的。也是贯穿整个Python数据分析非常核心的工具。
Pandas支持大部分Numpy语言风格,尤其是数组函数与广播机制的各种数据处理。但是Numpy更适合处理同质型的数据。而Pandas的设计就是用来处理表格型或异质型数据的,高效的清洗、处理数据。 -
Pandas数据结构介绍
Series(一维)
Series介绍
Series是一种一维的数组型对象,它包含了一个值序列(values),并且包含了数据标签,称为索引(index)。
Series创建
pd.Series(data=None,index=None,dtype=None,name=None,copy=False)
参数 | |
---|---|
data | 创建数组的数据,可为array-like, dict, or scalar value |
index | 指定行索引(索引和元素必须一致)索引默认为range(n) |
dtype | 数组数据类型 |
name | 数组名称 |
copy | 是否拷贝 |
Series方法 | |
---|---|
s.astype() | 修改数据类型 |
s.head(n) | 预览数据前5条 |
s.tail(n) | 预览数据后5条 |
s.reset_index(drop = False) | 重置索引,drop:删除原索引 |
Series属性 | |
---|---|
s.dtype | 查看数据类型 |
s.index | 查看行索引 |
关于Series索引与切片:
(默认索引range(n),修改索引为数字时为索引,修改索引为字符串时标签,标签用" ",如不存在标签,则不能取标签)
- s [“标签”](单取)
- s [ 索引 ](单取)
- s.loc[“标签”](单取)
- s.iloc[索引](单取)
- s [ [“标签”,“标签”] ] (间隔取)
- s [ [ 索引,索引 ] ] (间隔取)
- s [ “标签”:“标签” ] (连续取)
- s [ 索引:索引 ] (连续取)
- s [ 布尔索引 ](满足条件取)
关于Series运算:
(Series运算,对照索引运算,进行合并,如果运算一方没有,则值为NaN)
DataFrame(二维)
DataFrame介绍
DataFrame表示的是矩阵的数据表,它包含已排序的列集合,每一列可以是不同的值类型(数值,字符串,布尔值)。在DataFrame中,数据被存储为一个以上的二维块。
DataFrame创建
pd.DataFrame(data=None,index=None,columns=None,dtype=None,copy=False)
参数 | |
---|---|
data | 创建数组的数据,可为ndarray, dict |
index | 指定行索引,默认为range(n) |
columns | 指定列索引,默认为range(n) |
dtype | 数组数据类型 |
copy | 是否拷贝 |
DataFrame与dict:dict二层嵌套,外层为行,里层为列,呈现为DataFrame
data为dict时:
- columns默认为key,值为value,index默认为range(n),如果指定的columns没有值时,默认值为NaN
data为ndarray时:
- 默认形式存放,columns与index默认为range(n),指定columns或index没有对应值时,默认值为NaN
DataFrame常用方法 | |
---|---|
df.head(n) | 显示头部几行,默认前5行 |
df.tail(n) | 显示末尾几行,默认后5行 |
df.info() | 相关信息概述 |
DataFrame属性 | |
---|---|
df.shape | 查看数组形状,返回值为元组 |
df.dtypes | 查看列数据类型 |
df.ndim | 数据维度,返回为整数 |
df.index | 行索引 |
df.columns | 列索引(不用与) |
df.values | 值 |
重置索引:
(将原有索引进行替换,如果重置的索引 与 df中的索引无关则填充NaN,有关则填充原本值)
df.reindex(index=None, columns=None, axis=None,fill_value=nan)
参数 | |
---|---|
index | 行索引 |
columns | 列索引 |
axis | 指定轴 |
fill_value | 默认填充值,默认为NaN |
关于DataFrame索引与切片:
(取行取列区别看 “ : ”)
关于行:
(没有取列,默认为全部列)(可单取,可连续取)(左闭右闭原则)
- df [ :索引 ]
- df [ :“行标签” ]
- df [ : ] (取所有行及列)
关于列:
(没有取行,默认为全部行)(列只能单取或多个单取)
- df [ “列标签” ] (不可为行标签)
- df [ “列标签” , “列标签” ]
- df.列标签 (获取某一列)
关于loc与iloc:
(与numpy切片操作相似,神奇索引由 " ( ) " 变成了 " [ ] ")
语法:loc [ 行 , 列 ] ; iloc[ 行 , 列 ]
区别:loc当行没有标签时,可以使用索引,否则不行,iloc只能使用索引
索引标签重复问题:
当重复索引连续时,不论单取还是连续取,都不会报错,会将重复索引内容全部取出,当重复索引分开时,单取不会报错,连续取则会报错,不推荐使用重复索引和标签
添加数据的方式:
- 直接取值并赋值进行添加,值为一,或一 一对应(可添加行与列)
- 通过 insert 添加列
insert(loc, column, value, allow_duplicates=False)
参数 | |
---|---|
loc | 插入的位置 |
columns | 插入列标签的名称 |
value | 数据 |
allow_duplicates | 是否允许重复 |
- 通过 append 添加行
(列索引必须一致)
append(other, ignore_index=False, verify_integrity=False, sort=False)
参数 | |
---|---|
other | 另外一个数组 |
ignore_index | |
verify_integrity | |
sort |
删除数据方式:
- del df [ “列标签” ] (改变原数据)
- df.drop ( )(行列都可删除)(默认为0轴)
df.drop(labels=None,axis=0,index=None,columns=None, inplace=False)
参数 | |
---|---|
labels | 指定标签 |
axis | 指定轴 |
index | 指定行 |
columns | 指定列 |
inplace | 是否替换原数据 |
DataFrame算术:
和numpy相似,具有广播机制,但行列都不相同时,相同部分运算,不同部分自动填充NaN
(填充值算术运算,改变默认填充值,只需要设置参数 fill_value
)
使用填充值的算术运算 | |
---|---|
add | 加法(+) |
sub | 减法(-) |
div | 除法(/) |
floordiv | 整除(//) |
mul | 乘法(*) |
pow | 幂次方(**) |
注意:Series使用算术方法,不支持指定填充值
函数应用于映射:
方法 | |
---|---|
df.apply(func, axis=0) | 通过 apply 将func运用到列 或者 行 |
df.applymap(func) | applymap将func应用到每个数据上 |
DataFrame排序:
方法 | |
---|---|
df.sort_index(axis=0,ascending=True)(轴排序) | axis指定轴,ascending为排序方式,默认为True表示升序 |
df.sort_values(by)(值排序) | by指定一列或多列作为排序键 |
注意:by = [col1,col2] 是先给col1排序 当col1有相同值时,col2中按排序顺序再排序
描述性统计的概述和计算:
方法 | |
---|---|
count | 非NaN值的个数 |
min,max | 最小值,最大值 |
idxmin,idxmax | 最小值,最大值的标签索引 |
sum | 求和 |
mean | 平均值 |
median | 中位数 |
var | 方差 |
std | 标准差 |
cumsum | 累计值 |
cummin,cummax | 累计值的最小值或最大值 |
cumprod | 值的累计积 |
diff | 计算第一个算术差值(时间序列) |
pct_change | 百分比 |
corr | 按索引对其的值的相关性 |
cov | 协方差 |
- Pandas数据清洗过滤
数据清洗实际上也是数据质量分析,检查原始数据中是否存在脏数据(不符合要求,或者不能直接进行分析的数据),并且处理脏数据。
常见情况如下
- 缺失值
- 异常值
- 重复数据
处理缺失值
Pandas使用浮点值NaN(not a Number)表示缺失值,并且缺失值在数据中时常出现。那么Pandas的目的之一就是"无痛地"处理缺失值。
判断是否为NaN
- pd.isnull(df) (返回哪些是缺失值的布尔值,是则为True,否则为False)
- pd.notnull(df) (返回值是isnull的反集)
(注意python内建的None也会被当做NaN)
过滤缺失值
- df.dropna() (删除NaN的所有行或列)
dropna(axis=0,how='any',inplace=False)
参数 | |
---|---|
axis | 指定轴 |
how | 默认为any 代表删除含有NaN的axis 当为all 时代表删除所有值为NaN的axis |
inplace | 修改被调用的对象 而不是一个备份 |
填充缺失值
- fillna()
df.fillna(value=None,method=None,axis=None,inplace=False,limit=None)
参数 | |
---|---|
value | 标量或字典对象用于填充缺失值,允许数据类型:scalar, dict, Series, or DataFrame |
method | 插值方法 默认为"ffill",method总计方法:‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, ffill:从上往下填充,bfill:从往上填充 |
axis | 需填充的轴 默认为0 |
inplace | 修改被调用的对象 而不是一个备份 |
limit | 用于向前或向后填充时最大的填充范围 |