简介
Pandas是Python的一个数据分析包,最初于2008年4月开发,2009年底开源,目前由PyData开发团队继续开发和维护。它是为了解决数据分析任务而创建的基于Numpy的工具,纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具和大量能使我们快速便捷地处理数据的函数和方法,最初被作为金融数据分析工具而开发出来,也为时间序列分析提供了很好的支持。
数据结构
Series
Series是带标签的一维数组,与 Numpy中的维array类似,可以更有效的使用内存,提高运算效率,可存储不同类型的数据。它又像是一个Python的dict类型,存在索引与元素是映射关系,若在创建时没有显式指定索引,则默认索引为[0:N-1]。
技巧
与dict不同的是Series允许key值重复;如果将布尔值作为Serrise的索引,则只保留True对应的元素值
构造
Series的构造函数为:
|
|
其中各参数作用:
参数 | 介绍 |
---|---|
data |
初始化数据,可为数组、列表、字典等 |
index |
索引值必须唯一和散列,与数据长度相同 |
dtype |
数据类型 |
name |
设置名称 |
copy |
复制数据 |
示例:
|
|
成员变量
属性 | 说明 |
---|---|
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的构造函数:
|
|
其中各参数作用:
参数 | 介绍 |
---|---|
data |
数据采取各种形式,如:ndarray,series,map,lists,dict,constant和另一个DataFrame |
index |
行索引,缺省值np.arrange(n) |
columns |
列索引,缺省值np.arrange(n) |
dtype |
数据类型 |
name |
设置名称 |
copy |
复制数据 |
示例:
|
|
成员变量
属性 | 说明 |
---|---|
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() |
判断缺失值 |