数据分析--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 。习惯上,我们会按下面格式引入所需要的包:
一、创建对象
可以通过 Data Structure Intro Setion 来查看有关该节内容的详细信息。
1.1 可以通过传递一个list对象来创建一个Series,pandas会默认创建整型索引:
1.2 通过传递一个numpy array,时间索引以及列标签来创建一个DataFrame:
1.3 通过传递一个能够被转换成类似序列结构的字典对象来创建一个DataFrame:
1.4 查看不同列的数据类型:
二、查看数据
详情请参阅:Basics Section
2.1 查看frame中头部和尾部的行:
2.2 显示索引、列和底层的numpy数据:
2.3 describe()函数对于数据的快速统计汇总:
2.4 对数据的转置:
2.5 按轴进行排序
三、选择
虽然标准的Python/Numpy的选择和设置表达式都能够直接派上用场,但是作为工程使用的代码,我们推荐使用经过优化的pandas数据访问方式: .at, .iat, .loc, .iloc 和 .ix详情请参阅Indexing and Selecing Data 和 MultiIndex / Advanced Indexing。
3.1 获取
3.1.1 选择一个单独的列,这将会返回一个Series,等同于df.A:
3.1.2 通过[ ]进行选择,这将会对行进行切片
3.2 通过标签选择
3.2.1 使用标签来获取一个交叉的区域
3.2.2 通过标签来在多个轴上进行选择
3.2.3 标签切片
3.2.4 获取一个标量
3.3 通过位置选择
3.3.1 通过传递数值进行位置选择(选择的是行)
3.3.2 通过数值进行切片,与numpy/python中的情况类似
3.3.3 通过指定一个位置的列表,与numpy/python中的情况类似
3.3.4 对行进行切片
3.3.5 对列进行切片
3.3.6 获取特定的值
3.4 布尔索引
3.4.1 使用一个单独列的值来选择数据:
3.4.2 使用where操作来选择数据:
3.4.3 使用isin()方法来过滤:
3.5 设置
3.5.1 设置一个新的列:
3.5.2 通过标签设置新的值:
3.5.3 通过位置设置新的值:
3.5.4 通过一个numpy数组设置一组新值:
上述操作结果如下:
四、缺失值处理
在pandas中,使用np.nan来代替缺失值,这些值将默认不会包含在计算中,详情请参阅:Missing Data Section。
4.1 reindex()方法可以对指定轴上的索引进行改变/增加/删除操作,这将返回原始数据的一个拷贝:
4.2 去掉包含缺失值的行:
4.3 对缺失值进行填充:
4.4 对数据进行布尔填充:
五、相关操作
详情请参与 Basic Section On Binary Ops
5.1 统计(相关操作通常情况下不包括缺失值)
5.1.1 执行描述性统计:
5.1.2 在其他轴上进行相同的操作:
5.2 APPLY
5.2.1 对数据应用函数:
5.3 直方图
具体请参照:Histogramming and Discretization
5.4 字符串方法
Series对象在其str属性中配备了一组字符串处理方法,可以很容易的应用到数组中的每个元素,如下段代码所示。更多详情请参考:Vectorized String Methods.
六、合并
Pandas提供了大量的方法能够轻松的对Series,DataFrame和Panel对象进行各种符合各种逻辑关系的合并操作。具体请参阅:Merging section
6.1 Concat
6.2 Append
将一行连接到一个DataFrame上,具体请参阅Appending:
七、分组
对于”group by”操作,我们通常是指以下一个或多个操作步骤:
- (Splitting)按照一些规则将数据分为不同的组;
- (Applying)对于每组数据分别执行一个函数;
- (Combining)将结果组合到一个数据结构中;
详情请参阅:Grouping section
7.1 分组并对每个分组执行sum函数:
7.2 通过多个列进行分组形成一个层次索引,然后执行函数:
八、Categorical
从0.15版本开始,pandas可以在DataFrame中支持Categorical类型的数据,详细 介绍参看:categorical introduction 和 API documentation。
8.1 将原始的grade转换为Categorical数据类型:
8.2 将Categorical类型数据重命名为更有意义的名称:
8.3 对类别进行重新排序,增加缺失的类别:
8.4 对Categorical列进行排序时存在空的类别:
九、画图
具体文档参看:Plotting docs
对于DataFrame来说,plot是一种将所有列及其标签进行绘制的简便方法:
十、导入和保存数据
10.1 CSV
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']) |