pandas基础及常用方法概览

简介

Pandas是Python的一个数据分析包,最初于2008年4月开发,2009年底开源,目前由PyData开发团队继续开发和维护。它是为了解决数据分析任务而创建的基于Numpy的工具,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具和大量能使我们快速便捷地处理数据的函数和方法,最初被作为金融数据分析工具而开发出来,也为时间序列分析提供了很好的支持。

数据结构

Series

Series是带标签的一维数组,与 Numpy中的维array类似,可以更有效的使用内存,提高运算效率,可存储不同类型的数据。它又像是一个Python的dict类型,存在索引与元素是映射关系,若在创建时没有显式指定索引,则默认索引为[0:N-1]。

技巧
与dict不同的是Series允许key值重复;如果将布尔值作为Serrise的索引,则只保留True对应的元素值

构造

Series的构造函数为:

1
pd.Series([data, index, dtype, name, copy, ...])

其中各参数作用:

参数 介绍
data 初始化数据,可为数组、列表、字典等
index 索引值必须唯一和散列,与数据长度相同
dtype 数据类型
name 设置名称
copy 复制数据

示例:

1
2
3
4
5
6
7
8
9
# 1.数组创建
ser = pd.Series([10, 7, -4, 1])

# 2.字典创建+指定索引
data = {"a":1.,"b":2,"c":3,"d":4}
ser = pd.Series(data,index=["d","c","b","a"])

# 3.常量创建
ser = pd.Series(pd.Series(5,index=[1,2,3,4,5]))

成员变量

属性 说明
values 以数组方式获取Series的元素值
index 以数组方式获取Series的元素索引
name 获取values的name(需额外指定)
index.name 获取index的name(需额外指定)
dtype 获取Series数据类型
array 以数组方式获取Series的值,与values的区别在于array返回的是PandasArray()数据结构

Time-Series

以时间为索引的 Series

DataFrame

DataFrame是带标签且大小可变的二维表格型数据结构,可以将DataFrame理解为Series的容器。DataFrame由按一定顺序排列的多列数据组成,设计初衷是将Series的使用场景从一维拓展到多维,它既有行索引,也有列索引。

技巧
DataFrame数据是以一个或多个二维块存放的,而不是别的一维数据结构

构造

DataFrame的构造函数:

1
pd.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)

其中各参数作用:

参数 介绍
data 数据采取各种形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame
index 行索引,缺省值np.arrange(n)
columns 列索引,缺省值np.arrange(n)
dtype 数据类型
name 设置名称
copy 复制数据

示例:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
# 1. 单个列表+指定行索引
data = [1,2,3,4,5]
df = pd.DataFrame(data, index=['1','2','3','4', '5'])

# 2. 列表套列表+指定列索引
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=["name","age"])

# 3. 字典(键为列索引)
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)

# 4. 字典列表
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]  # 字典键默认为列名,没有值得为NaN
df = pd.DataFrame(data,index=["first","second"])  # 自定义行索引

# 5. numpy 
pd.DataFrame(np.random.randint(60,100,size=(3,4)))  # 60-100随机选择,3行4列

成员变量

属性 说明
values 取出所有值
index 以数组方式返回行标签
columns 以数组方式返回列标签
axes 以二维数组方式返回行标签与列标签
T 以数组方式返回行列转置后的DataFrame,类似于矩阵
shape 当前表是几行几列

panel

三维数组,可以理解为DataFrame容器

通用方法

方法 解释
df.info() 打印二维数组的信息,包含行列标签,内存大小,
df.head(i)/df.tail(i) 显示前/后i行数据,以行为单位
df.describe() 查看数据值列的汇总统计
df.drop() 删除指定位置的数据
df1+df2 在运算中自动对齐不同索引的数据,如果索引不对应,则补NaN
ser.reindex() 重设索引,该函数会创建一个新的对象
ser.unique() 对series元素进行去重
ser.isnull()/ser.isnull() 缺失的数据返回的布尔值为True/False

数据读写

读写方法

数据类型 描述符 读方法 写方法
text CSV read_csv to_csv
text JSON read_json to_json
text HTML read_html to_html
text 剪切板 read_clipboard to_clipboard
二进制 Excel read_excel to_excel
二进制 HDF5 read_hdf to_hdf
二进制 PKL read_pickle to_pickle
SQL SQL read_sql to_sql

通用参数

参数 介绍
filepath 文件存储路径,可以用r"“进行非转义限定
encoding 指定数据编码
sep 指定分割符
header 指定第一行是否是列名:0(数据第一行为列名)、None(表明数据没有列名)。常与names搭配使用
names 指定列名
usecols 指定读取的列名
index_col 指定哪几列作为索引
skiprows 跳过行数
nrows 读取行数
技巧
header=0时,用names可以替换掉第数据中的第一行作为列名;header=None,用names可以增加一行作为列名;没有header参数时,用names会增加一行作为列名,原数据的第一行仍然保留

统计方法

方法 介绍
df.count() 非 NA 值的数量
df.describe() 针对 Series 或 DF 的列计算汇总统计
df.min()/df.max() 最小值和最大值
df.argmin()/df.argmax() 最小值和最大值的索引位置(整数)
df.idxmin()/df.idxmax() 最小值和最大值的索引值
df.quantile() 样本分位数(0 到 1)
df.sum() 求和
df.mean() 均值
df.median() 中位数
df.mad() 根据均值计算平均绝对离差
df.var() 方差
df.std() 标准差
df.skew() 样本值的偏度(三阶矩)
df.kurt() 样本值的峰度(四阶矩)
df.cumsum() 样本值的累计和
df.cummin()/df.cummax() 样本值的累计最大值和累计最小值
df.cumprod() 样本值的累计积
df.diff() 计算一阶差分(对时间序列很有用)
df.pct_change() 计算百分数变化

遍历与排序

遍历

方法 介绍
df.iterrows() 将DataFrame的每一行迭代为(index, Series)对,可以通过row[name]对元素进行访问
df.iteritems() 将DataFrame的每一列迭代为(列名, Series)对,可以通过row[index]对元素进行访问
df.itertuples() 将DataFrame的每一行迭代为元祖,可以通过row[name]对元素进行访问,比iterrows()效率高

排序

方法 介绍
df.sort_index() 将按行/列索引排序
df.sort_values() 按指定值排序

缺失值处理

方法 介绍
df.dropna() 删除缺失值
df.isna()/df.notna() 判断缺失值
df.fillna()/df.interpolate() 判断缺失值