从公众号复制来的,排版可能不耐看,不要介意哈。
pandas是Python编程语言的用于数据操纵和分析的软件库。特别是它提供操纵数值表格和时间序列的数据结构和运算操作。pandas是在三条款BSD许可证下发行的自由软件,其名字衍生自术语“面板数据”(panel data),这是计量经济学的数据集术语,它包括了对同一个体的在多个时期上的观测。
特征
-
DataFrame对象,用于数据操纵并具有集成的索引。
-
在内存中数据结构和不同的文件格式之间读写数据的工具。
-
数据对齐和集成的缺失数据处理。
-
数据集的再成形(reshape)和选择(pivot)。
-
大数据集的基于标签的分片、fancy索引和子集。
-
数据结构列的插入和删除。
-
按引擎(engine)分组,允许在数据集上的分离-应用-合并(split-apply-combine)运算操作。
-
数据集的归并和连接。
-
层级轴索引,以低维数据结构工作在高维数据上。
-
时间序列-功能:数据范围生成和频率转换,移动窗口统计,移动窗口线性回归,数据转移(shift)和滞后(lag)。
-
提供数据过滤。
这个库对性能进行了高度优化,具有关键代码路径用Cython或C写成。
——来自维基百科:https://zh.wikipedia.org/wiki/Pandas
两种数据类型
Series
定义 由一组数据及与之相关的数据索引组成
上述定义一个序列,指定索引为一个由字符构成的列表,可以看到字符和值一一对应
创建 Series对象
-
Python列表
指定索引时,索引元素需与列表元素一致
-
标量值
标量值创建,如未指定索引index,则默认创建一个元素
-
Python字典
使用字典创建Series对象时,默认其键为索引,当然也可以指定索引,但是如果指定的索引与键不匹配,将自动填充NaN值
-
ndarray对象
数据值和索引皆可由ndarray创建
-
其他函数,如range()函数
属性
-
.name 获取数据序列name
-
.index.name 获取索引name
-
.index 获取索引
-
.values 获取数据集
上述代码由字典创建一个Series对象,并设置其name,index.name等属性,然后获取其他相应属性
数据访问
Series对象拥有两种索引,自动索引和自定义索引,它的操作类似数组和字典,可以使用切片、下标、.get()等方式获取数据集,也可以使用保留字in对其遍历
注:Series在运算时,会自动对其不同索引的数据,可以使用df[col][row]方法获取指定单个元素数据
另外可使用loc和iloc选择数据
-
df.loc[val] 选择单列或者多列
-
df.loc[:,val] 选择单列或者多列
-
df.loc[val1,val2] 选择行列中的一部分
-
df.iloc[where] 根据整数选择单行或者多行
-
df.iloc[:,where] 根据整数选择单列或者多列
-
df.at[label1,label2] 根据标签选择单个标量值
上述创建两个Series对象,后两个索引d,e没有对其,也就是s2中没有,Series会自动将其值填充为NaN后进行运算,NaN与其他数据运算结果仍未NaN
DataFrame
定义 由共用相同索引的一组列组成,它是一个表格型的数据,每列值类型可以不同,具有列索引和行索引,通常用于表达二维数据,也可表达多维数据
创建
-
二维ndarray对象
-
由一维ndaaray、列表、字典、元组或Series构成的字典
当使用字典创建DataFrame时,默认外层键作为列索引,内层键作为行索引
-
Series对象
-
其他DataFrame
属性
-
index.names 返回所有索引名称
-
index 返回索引
-
columns 返回列明
数据操作
重新索引
reindex() 可以改变或重排Series和DataFrame索引
参数
-
index,columns 新的行列自定义索引
-
fill_value 填补缺失的值
-
method 填充方法,ffill/bfill:先前/后填充
-
limit 最大填充量
-
copy bool 生成新的对象,False时,新旧相等不复制
set_index() 将一个列转变为索引,并创建一个新的DataFrame,默认情况下要转变为索引的列将被移除。
层次化索引 在一个轴上拥有多个索引,简而言之就是以低维度处理高维度数据。指定索引和列头是传入多个参数,当参数间标签值相同时,分为同一个级别。
重排分级
swaplevel(class1,class2) 返回一个交换了级别的对象,但原数据不会改变
删除元素 drop()方法可删除指定Series和DataFrame列或行数据,删除列数据时,参数axis值为1
算数运算
-
根据行列索引,补齐后运算,默认产生浮点数结果
-
补齐是缺失项填充NaN
-
二维和一维,一维和零维间为广播运算
-
采用+-*/符号的二元运算将产生新的对象
关于广播
指 NumPy 在算术运算期间处理不同形状的数组的能力。对数组的算术运算通常在相应的元素上进行。如果两个阵列具有完全相同的形状,则这些操作被无缝执行。如果两个数组的维数不相同,则元素到元素的操作是不可能的。然而,在 NumPy 中仍然可以对形状不相似的数组进行操作,因为它拥有广播功能。较小的数组会广播到较大数组的大小,以便使它们的形状可兼容。
如果满足以下条件之一,那么数组被称为可广播的。
-
数组拥有相同形状。
-
数组拥有相同的维数,且某一个或多个维度长度为 1 。
-
数组拥有极少的维度,可以在其前面追加长度为 1 的维度,使上述条件成立
广播的规则:
-
如果两个数组的维度数不相同,那么小维度数组的形状将会在最左边补 1。
-
如果两个数组的形状在任何一个维度上都不匹配,那么数组的形状会沿着维度 为 1 的维度扩展以匹配另外一个数组的形状。
-
如果两个数组的形状在任何一个维度上都不匹配并且没有任何一个维度等于 1, 那么会引发异常。
数组乘以标量也是属于广播
算数运算方法
-
add() 加法运算
-
sub() 减法运算
-
mul() 乘法运算
-
div() 除法运算
参数为df,**kwargs
上述df1和df2进行相加运算,由于维度不一致,df1的缺失项以0填充后进行运算
摘要
摘要是有损地提取数据特征的过程,对于一组数据,对其进行摘要后,形成
-
基本统计(含排序)
-
分布/累计统计
-
数据特征(相关性,周期……)
-
数据挖掘(形成知识、经验)
数据排序 sort_index()方法可在指定轴上根据索引进行排序
参数:
-
axis 指定轴,0为行,1为列
-
ascending bool 指定升序或降序,默认升序
sort_values() 可在指定轴上根据数值进行排序,默认升序
参数:
-
axis 同上
-
ascencindg 同上
-
by 指定列/行
注意:以上排序会忽略NaN值,将其放置在末尾处
基本统计函数
.sum() | 计算数据总和 |
.count() | 计算非NaN值的数量 |
.mean/.median() | 计算数据算数平均值、中位数 |
.var/std() | 计算数据方差、标准差 |
.min/max() | 计算数据最大、小值 |
默认在0轴操作,适用于Series和DataFrame
可传递level级别作分组统计
.argmin/argmax() | 计算最大/小值所在位置的自动索引 |
.idxmin/max() | 计算最大/小值所在位置的自定义索引 |
仅适用于Series
describe()方法可针对0轴上的数据作统计汇总(包含表一的所有值)
累计统计
.cumsum() | 依次给出前n个的和 |
.cumprod() | 依次给出前n个的积 |
.cummin() | 依次给出前n个的最小值 |
.cummax() | 依次给出前n个的最大值 |
滚动计算
.rolling(w).sum() | 依次计算相邻w个元素的和 |
.rolling(w).mean() | 依次计算相邻w个元素的算术平均数 |
.rolling(w).var() | 依次计算相邻w个元素的方差 |
.rolling(w).std() | 依次计算相邻w个元素的标准差 |
.rolling(w).min/max() | 依次计算相邻w个元素的最大/小 |
相关分析
.cov() | 计算协方差矩阵 |
.corr() | 计算相关系数矩阵,Pearson/Spearman/Kendall等系数 |
读写文件
pandas提供read_csv、read_table、read_fwf以及read_clipboard函数读取数据,但在这里我主要记录如何读取csv文件
read_csv() 从url、文件、文件型对象中读取带有分隔符的数据,默认分隔符为逗号','
参数
-
path 指定读取文件的绝对路径
-
header 指定列明,为None时pandas将自动分配
-
nrows 指定读取列数
-
index_col 指定索引,传入列表时将此件层次化索引
-
skiprows 指定跳过行
-
na_values 指定缺失值的字符串,也可用字典
-
chunksize 逐块读取
df.to_csv() 将数据写入csv文件
参数
-
path 同上
-
sep 分隔符
-
na_rep NaN值替换字符
-
index bool是否写入索引
-
headr bool是否写入列头
-
cols 指定写入列
记录时偶尔心不在焉,如有错误,请以官方文档为准
参考资料:
-
北京理工大学.嵩天.Python数据分析与展示
-
https://zh.wikipedia.org/wiki/Pandas
-
徐敬一.利用Pyhton进行数据分析[M].机械工业出版社.2018
-
Wes McKinney,Pandas Development Team.pandas:powerful Python data nanalysis toolkit[DK].2021-02-09