数据分析--Pandas

Pandas简介

1、Python Data Analysis Library 或 Pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Pandas提供了大量能使我们快速便捷地处理数据的函数和方法。你很快就会发现,它是使Python成为强大而高效的数据分析环境的重要因素之一。

2、数据结构:

  • Series: 一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近,其区别是:List中的元素可以是不同的数据类型,而Array和Series中则只允许存储相同的数据类型,这样可以更有效的使用内存,提高运算效率。
  • Time- Series: 以时间为索引的Series。
  • DataFrame: 二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。以下的内容主要以DataFrame为主。
  • Panel : 三维的数组,可以理解为DataFrame的容器。

Pandas 有两种自己独有的基本数据结构。读者应该注意的是,它固然有着两种数据结构,因为它依然是 Python 的一个库,所以,Python 中有的数据类型在这里依然适用,也同样还可以使用类自己定义数据类型。只不过,Pandas 里面又定义了两种数据类型:Series 和 DataFrame,它们让数据操作更简单了。

运行环境:jupyter notebook
参考链接:十分钟搞定pandas


本文是对pandas官方网站上《10 Minutes to pandas》的一个简单的翻译,原文在这里。这篇文章是对pandas的一个简单的介绍,详细的介绍请参考:Cookbook 。习惯上,我们会按下面格式引入所需要的包:

img

一、创建对象

可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。

1.1 可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:

img

1.2 通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:

img

1.3 通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:

img

1.4 查看不同列的数据类型:

img


二、查看数据

详情请参阅:Basics Section

2.1 查看frame中头部和尾部的行:

img

2.2 显示索引、列和底层的numpy数据:

img

2.3 describe()函数对于数据的快速统计汇总:

img

2.4 对数据的转置:

img

2.5 按轴进行排序

img


三、选择

虽然标准的Python/Numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问方式: .at, .iat, .loc, .iloc 和 .ix详情请参阅Indexing and Selecing DataMultiIndex / Advanced Indexing

3.1 获取

3.1.1 选择一个单独的列,这将会返回一个Series,等同于df.A:

img

3.1.2 通过[ ]进行选择,这将会对行进行切片

img

3.2 通过标签选择

3.2.1 使用标签来获取一个交叉的区域

img

3.2.2 通过标签来在多个轴上进行选择

img

3.2.3 标签切片

img

3.2.4 获取一个标量

img

3.3 通过位置选择

3.3.1 通过传递数值进行位置选择(选择的是行)

img

3.3.2 通过数值进行切片,与numpy/python中的情况类似

img

3.3.3 通过指定一个位置的列表,与numpy/python中的情况类似

img

3.3.4 对行进行切片

img

3.3.5 对列进行切片

img

3.3.6 获取特定的值

img

3.4 布尔索引

3.4.1 使用一个单独列的值来选择数据:

img

3.4.2 使用where操作来选择数据:

img

3.4.3 使用isin()方法来过滤:

img

3.5 设置

3.5.1 设置一个新的列:

img

3.5.2 通过标签设置新的值:

img

3.5.3 通过位置设置新的值:

img

3.5.4 通过一个numpy数组设置一组新值:

img

上述操作结果如下:

img


四、缺失值处理

在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中,详情请参阅:Missing Data Section

4.1 reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:

img

4.2 去掉包含缺失值的行:

img

4.3 对缺失值进行填充:

img

4.4 对数据进行布尔填充:

img


五、相关操作

详情请参与 Basic Section On Binary Ops

5.1 统计(相关操作通常情况下不包括缺失值)

5.1.1 执行描述性统计:

img

5.1.2 在其他轴上进行相同的操作:

img

5.2 APPLY

5.2.1 对数据应用函数:

img

5.3 直方图

具体请参照:Histogramming and Discretization

img

5.4 字符串方法

Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素,如下段代码所示。更多详情请参考:Vectorized String Methods.

img

六、合并

Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。具体请参阅:Merging section

6.1 Concat

img

6.2 Append
将一行连接到一个DataFrame上,具体请参阅Appending

img


七、分组

对于”group by”操作,我们通常是指以下一个或多个操作步骤:

  • (Splitting)按照一些规则将数据分为不同的组;
  • (Applying)对于每组数据分别执行一个函数;
  • (Combining)将结果组合到一个数据结构中;

详情请参阅:Grouping section

img

7.1 分组并对每个分组执行sum函数:

img

7.2 通过多个列进行分组形成一个层次索引,然后执行函数:

img


八、Categorical

从0.15版本开始,pandas可以在DataFrame中支持Categorical类型的数据,详细 介绍参看:categorical introductionAPI documentation

img

8.1 将原始的grade转换为Categorical数据类型:

img

8.2 将Categorical类型数据重命名为更有意义的名称:

img

8.3 对类别进行重新排序,增加缺失的类别:

img

8.4 对Categorical列进行排序时存在空的类别:

img


九、画图

具体文档参看:Plotting docs

img

对于DataFrame来说,plot是一种将所有列及其标签进行绘制的简便方法:

img


十、导入和保存数据

10.1 CSV

参考:Writing to a csv file

10.1.1 写入csv文件:

1
df.to_csv("xxx.csv")

10.1.2 从csv文件中读取:

1
pd.read_csv("xxx.csv")

10.2 EXCEL

参考:MS Excel

10.2.1 写入excel文件:

1
df.to_excel("xxx.xlsx",sheet_name = 'Sheet1')

10.2.2 从excel文件中读取:

1
pd.read_excel('xxx.xlsx','Sheet1',index_col=None,na_values=['NA'])