本章节以及后续章节的源码,当然也可以从我的github下载,在源码中我自己加了一些中文注释。
现在是晚上九点十五,哎,今天要写的东西有点多,看来又得推到明天了。不该刷抖音看微博,emmmmmm..........
进入正题:
Pandas含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas经常和其它工具一同使用,如数值计算工具NumPy和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib。pandas是基于NumPy数组构建的,特别是基于数组的函数和不使用for循环的数据处理。
虽然pandas采用了大量的NumPy编码风格,但二者最大的不同是pandas是专门为处理表格和混杂数据设计的。而NumPy更适合处理统一的数值数组数据。
使用pandas首先要了解它的两个数据结构:Series和DataFrame
一、Series
Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成。
二、DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类(数值、字符串、布尔值等)
可以输入给DataFrame构造器的数据:
构建DataFrame
三、索引对象
pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series和DataFrame时,所用的任何数组或其他序列标签都会被转换成一个Index
与python的集合不同,pandas的Index可以包含重复的标签
每个索引都有一些方法和属性,它们可用于设置逻辑并回答有关该索引所包含的数据的常见问题。表5-2列出了这些函数。
四、Pandas基本功能
1、重新索引(reindex函数)
reindex函数的参数:
插值(method)的选项:
2、丢弃指定轴上的项
丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。drop方法返回的是一个在指定轴上删除了指定值的新对象。
用标签序列调用drop会从行标签(axis 0)删除值 通过传递axis=1或axis='columns'可以删除列的值3、索引、选取和过滤
利用标签的切片运算与普通的Python切片运算不同,其末端是包含的
通过布尔型DataFrame进行索引(1) loc和iloc的区别
iloc主要使用数字来索引数据,而不能使用字符型的标签来索引数据。而loc则刚好相反,只能使用字符型标签来索引数据,不能使用数字来索引数据,不过有特殊情况,当数据框dataframe的行标签或者列标签为数字,loc就可以来其来索引。
(2)ix是一种混合索引,字符型标签和整型数据索引都可以。在pandas0.20.0及以上版本,ix已经丢弃,请尽量使用loc和iloc;
所以,在pandas中,有多个方法可以选取和重新组合数据,对于DataFrame,表5-4进行了总结。
4、整数索引
处理整数索引的pandas对象常常难住新手,因为它与Python内置的列表和元组的索引语法不同。例如,你可能不认为下面的代码会出错:
ser = pd.Series(np.arange(3.))
ser
ser[-1]
这里,pandas可以勉强进行整数索引,但是会导致小bug。我们有包含0,1,2的索引,但是引入用户想要的东西(基于标签或位置的索引)很难,另外,对于非整数索引,就不会产生歧义
为了进行统一,如果轴索引含有整数,数据选取总会使用标签。为了更准确,请使用loc(标签)或iloc(整数)
5、算术运算和数据对齐
pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算。在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。对于有数据库经验的用户,这就像在索引标签上进行自动外连接。
自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播对于DataFrame,对齐操作会同时发生在行和列上:
把它们相加后将会返回一个新的DataFrame,其索引和列为原来那两个DataFrame的并集:
表下列出了Series和DataFrame的算术方法。它们每个都有一个副本,以字母r开头,它会翻转参数。因此这两个语句是等价的:
灵活的算术方法:
DataFrame和Series之间的运算:
当我们从arr减去arr[0],每一行都会执行这个操作,这就叫做广播(broadcasting)默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播:
如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集:
如果你希望匹配行且在列上广播,则必须使用算术运算方法。例如:
6、函数应用和映射
另一个常见的操作是将函数应用到由各列或行所形成的一维数组上,DataFrame 的apply方法即可实现该功能
这里的函数f,计算了一个Series的最大值和最小值的差,在frame的每列都执行了一次。结果是一个Series,使用frame的列作为索引。
7、排序和排名
要对行或列索引进行排序,可使用sort_index方法,它将返回一个已排序的新对象
在排序时,任何缺失值默认都会被放到Series的末尾排名用rank()函数,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的:
条目0和2没有使用平均排名6.5,它们被设成了6和7,因为数据中标签0位于标签2的前面。排名时用于破坏平级关系的method选项:
8、带有重复值的轴索引
8、汇总和计算描述统计
pandas对象拥有一组常用的数学和统计方法。它们大部分都属于越简和汇总统计,用于从Series中提取单个值(如sum和mean)或从DataFrame的行或列中提取一个Series。
约简方法的选项:
描述和汇总统计方法:
10、相关系数和协方差
相关系数和协方差是通过参数对计算出来的。我们选取来自Yahoo!Finance的股票价格和成交量:
在看代码前先干两件事:
一、pip install pandas_datareader安装这个模块,然后把这个模块下(\Lib\site-packages\pandas_datareader)下的fred.py文件中的pandas.core.common import is_list_like修改为pandas.api.types import is_list_like
二、pip install fix_yahoo_finance安装这个模块,在获取数据前运行以下代码即可:
AAPL的数据import fix_yahoo_finance as fy
fy.pdr_override()
11、唯一值、值计数以及成员资格
唯一值、值计数、成员资格方法:
结果中的行标签是所有列的唯一值。后面的频率值是每个列中这些值的相应计数。五、层次化索引
层次化索引是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。
重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序。swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生变化):
sort_index则根据单个级别中的值对数据进行排序。交换级别时,常常也会用到sort_index,这样最终结果就是按照指定顺序进行字母排序了:
许多对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。再以上面那个DataFrame为例,我们可以根据行或列上的级别来进行求和:
如果想要将DataFrame的一个或多个列当做行索引来用,或者希望将行索引变成DataFrame的列,使用set_index函数和reset_index函数
六、面板数据
pandas有一个Panel数据结构,可以看做一个三维版的DataFrame。pandas的大部分开发工作都集中在表格型数据的操作上,因为这些数据更常见,而且层次化索引也使得多数情况下没必要使用真正的N维数组。
可以使用DataFrame对象组成的字典或一个三维ndarray来创建Panel对象:
快速学习:
网友评论