4. pandas
文章目录
4.1 pandas介绍
2008年WesMcKinney开发出的库
专门用于数据挖掘的开源python库
以Numpy为基础,借力Numpy模块在计算方面性能高的优势
基于matplotlib,能够简便的画图
独特的数据结构
4.2 使用pandas的原因
-
增强图表可读性
-
便捷的数据处理能力
-
读取文件方便
-
封装了Matplotlib、Numpy的画图和计算
4.3 pandas数据结构
4.3.1 Series
-
一维数据结构,类似于一维数组
- 能够保存任何类型的数据
- 由一组数据和与之相关的索引两部分构成
-
创建
-
pd.Series(data=None, index=None, dtype=None)
- data:传入的数据,可以是ndarray、list等
- index:索引,必须是唯一的,且与数据的长度相等。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
- dtype:数据的类型
-
通过已有数据创建
- 指定内容,默认索引
- 指定内容,指定索引
-
通过字典数据创建
-
-
属性
- index
- values
4.3.2 DataFrame
-
二维表格型数据结构,类似于二维数组或表格
-
行索引
- 表明不同行。横向索引,叫index,0轴,axis = 0
-
列索引
- 表明不同列。纵向索引,叫columns,1轴,axis = 1
-
-
创建
-
pd.DataFrame(data=None, index=None, columns=None)
- index:行标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
- columns:列标签。如果没有传入索引参数,则默认会自动创建一个从0-N的整数索引。
-
通过已有数据创建
-
-
属性
-
shape
-
index
- dataframe的行索引列表
-
columns
- dataframe的列索引列表
-
values
- 直接获取其中array的值
-
T
- 转置
-
.head(5)
- 显示前5行内容,不补充参数,默认5行,填入参数则显示前N行
-
.tail(5)
- 显示后5行内容,不补充参数,默认5行,填入参数则显示后N行
-
-
索引的设置
-
修改行列索引值
- 必须整体全部修改
-
重设索引
-
reset_index(drop=False)
- drop:默认为False,不删除原来索引,如果为True,删除原来的索引值
-
-
以某列值设置为新的索引
-
set_index(keys, drop=True)
- keys : 列索引名成或者列索引名称的列表
- drop : boolean, default True.当做新的索引,删除原来的列
-
-
4.3.3 MuliIndex
-
三维数据结构
-
多级或分层索引对象
-
index属性
- names:levels的名称
- levels:每个level的元组值
-
-
创建
- pd.MultiIndex.from_arrays()
4.3.4 panel
-
存储3维数组
-
class pandas.Panel(data=None, items=None, major_axis=None, minor_axis=None)
- data : ndarray或者dataframe
- items : 索引或类似数组的对象,axis=0
- major_axis : 索引或类似数组的对象,axis=1
- minor_axis : 索引或类似数组的对象,axis=2
-
panel数据要是想看到,则需要进行索引到dataframe或者series才可以
4.4 基本数据操作
4.4.1 索引操作
-
直接使用行列索引(先列后行)
-
结合loc或者iloc使用索引
- 使用loc:只能指定行列索引的名字
- 使用iloc可以通过索引的下标去获取
-
使用ix组合索引
- 使用ix进行下表和名称组合做引
4.4.2 赋值操作
-
对DataFrame当中的close列进行重新赋值为1
- data[‘close’] = 1
- data.close = 1
4.4.3 排序
-
形式
- 对于索引进行排序
- 对于内容进行排序
-
dataframe排序
-
df.sort_values(by=, ascending=) , 单个键或者多个键进行排序
-
by:指定排序参考的键
-
ascending:默认升序
- ascending=False:降序
- ascending=True:升序
-
-
df.sort_index给索引进行排序
-
-
Series排序
- series.sort_values(ascending=True)
- series.sort_index()
4.5 DataFrame 运算
4.5.1 算术运算
- add
- sub
4.5.2 逻辑运算
-
>
-
多个逻辑 &
-
逻辑运算函数
-
query(expr)
- expr:查询字符串
-
isin(values)
- 是否为某(些)值
-
4.5.3 统计运算
-
describe
- 综合分析: 能够直接得出很多统计结果,count, mean, std, min, max 等
-
统计函数
-
-
max(0 代表列求结果,1代表行求统计结果)
-
std() → 标准差
-
var() → 方差
-
median() → 中位数
-
idxmax() 求最大值的位置
-
idxmin() 求最小值的位置
-
累计统计函数
-
4.5.4 自定义运算
-
apply(func, axis=0)
- func:自定义函数
- axis=0:默认是列,axis=1为行进行运算
4.6 pandas画图
4.6.1 pandas.DataFrame.plot(kind=“line”)
-
kind
- ‘line’ : line plot (default)
- ‘bar’ : vertical bar plot
- ‘barh’ : horizontal bar plot
- ‘hist’ : histogram
- ‘pie’ : pie plot
- ‘scatter’ : scatter plot
4.6.2 pandas.Series.plot
4.7 文件读取与存储
4.7.1 CSV
-
pandas.read_csv(filepath_or_buffer, sep =‘,’, usecols )
- filepath_or_buffer:文件路径
- sep :分隔符,默认用","隔开
- usecols:指定读取的列名,列表形式
-
DataFrame.to_csv(path_or_buf=None, sep=', ’, columns=None, header=True, index=True, mode=‘w’, encoding=None)
- path_or_buf :文件路径
- sep :分隔符,默认用","隔开
- columns :选择需要的列索引
- header :boolean or list of string, default True,是否写进列索引值
- index:是否写进行索引
- mode:‘w’:重写, ‘a’ 追加
4.7.2 HDF5
-
HDF5文件的读取和存储需要指定一个键,值为要存储的DataFrame
-
pandas.read_hdf(path_or_buf,key =None,** kwargs)
- path_or_buffer:文件路径
- key:读取的键
- return:Theselected object
-
DataFrame.to_hdf(path_or_buf, key, \kwargs)
-
优先选择使用HDF5文件存储
- HDF5在存储的时候支持压缩,使用的方式是blosc,这个是速度最快的也是pandas默认支持的
- 使用压缩可以提磁盘利用率,节省空间
- HDF5还是跨平台的,可以轻松迁移到hadoop 上面
4.7.3 JSON
-
pandas.read_json(path_or_buf=None, orient=None, typ=‘frame’, lines=False)
- 将JSON格式准换成默认的Pandas DataFrame格式
-
DataFrame.to_json(path_or_buf=None, orient=None, lines=False)
- 将Pandas 对象存储为json格式
4.8 高级处理
4.8.1 缺失值处理
-
如何处理nan
-
获取缺失值的标记方式
-
NAN
-
判断数据中是否包含nan
-
存在nan
- 删除,dropna(axis=‘rows’)
- 替换,fillna(value, inplace=True)
-
没有使用nan
- 先替换为nan,再继续处理
-
pd.isnull(df)
-
pd.notnull(df)
-
-
-
-
4.8.2 数据离散化
-
减少给定连续属性值的个数
-
连续属性的离散化就是在连续属性的值域上,将值域划分为若干个离散的区间,最后用不同的符号或整数 值代表落在每个子区间中的属性值
-
qcut、cut实现数据分组
- qcut:大致分为相同的几组
- cut:自定义分组区间
-
get_dummies实现哑变量矩阵
4.8.3 合并
-
pd.concat([data1, data2], axis=1)
- 按照行或列进行合并,axis=0为列索引,axis=1为行索引
-
pd.merge(left, right, how=‘inner’, on=None)
-
可以指定按照两组数据的共同键值对合并或者左右各自
- left: DataFrame
- right: 另一个DataFrame
- on: 指定的共同键
- how:按照什么方式连接
-
4.8.4 交叉表与透视表
-
交叉表
- 计算一列数据对于另外一列数据的分组个数
-
透视表
- 指定某一列对另一列的关系
4.8.5 分组与聚合
- 分组与聚合通常是分析数据的一种方式,通常与一些统计函数一起使用,查看数据的分组情况
- pandas中,抛开聚合谈分组,无意义