引言:Pandas的学习我将写成一个系列帮助新手入门, 暂时我没有给题目加任何明显的标题索引,因为我希望无论是我本人还是读者都只能从头到尾的浏览,没有捷径,祝你好运
Pandas是基于numpy构建的,让以Numpy为中心的应用变得更加简单。
- 具备按轴自动或者显式数据对齐功能的数据结构。这可以防止许多由于数据未对齐以及来自不同数据源(索引方式不同)的数据而导致的常见错误
- 集成时间序列功能
- 既能处理时间序列数据也能处理非时间序列数据的数据结构
- 数学运算和约简(比如某个轴求和)可以根据不同的元数据(轴编号)执行
- 灵活处理缺失数据
合并及其他出现在常见数据库(例如基于sql的)中关系型运算
Pandas的数据结构
pandas中有两个主要的数据结构:Series和DataFrame。
Series
series是一种类似于一维数组的对象,他由一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
Series的字符串表现形式为:索引在左边,值在右边。由于我们没有为数据指定索引,于是会自动创建一个0到N-1(N为数据长度)的整数型索引。可以通过Series的value和index属性获取其数组表示形式和索引对象DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。DataFrame既有行索引也有列索引,他可以被看做由Series组成的字典(共用同一个索引)。跟其他类似的数据结构相比,dataFrame中面向行和面向列的操作基本上是平衡的。其实,DataFrame中的数据是以一个或者多个二维块村烦的(而不是列表,字典或别的一维数组)。但仍然可以轻松地将其表示为更高维度的数据(层次化索引的表格型结构,这是许多高级数据处理功能的关键因素)
构建DataFrame,可以直接传入一个由等长列表或Numpy数组组成的字典,也会自动加上索引,且全部列会被有序排列
如果指定了列序列,则DataFrame的列就会按照指定顺序进行排列
跟Series一样,如果传入的列在数据中找不到,就会产生NA值
通过类似字典标记的方式或属性的方法,可以将DataFrame的列获取为一个Series
返回的Series拥有源DataFrame相同的索引,且其name属性也已经被相应地设置好了。行也可以通过位置或者名称的方式进行获取,比如用索引字典ix
列可以通过赋值的方法进行修改。可以向某一列赋上一个标量值或者一组值
为不存在的列赋值会出现一个新列。关键词del用于删除列。
需要注意的是通过索引方式返回的列只是相应数据的视图而已,并不是副本。因此,对返回的Series所做的任何就地修改的操作全都会反映到源DataFrame上,所以Series的copy的方法即可显式地复制列。
另一种常见的数据形式是嵌套字典(也就是字典中的字典),如果将字典传给DataFrame,它就会被解释为:外层字典的键作为列,内层键则作为行索引
可以输入给DataFrame构造函数所能接受的各种数据
类型 | 说明 |
---|---|
二维ndarray | 数据矩阵,还可以传入行标和列标 |
由数组,列表或元组组成的字典 | 每个序列会变成DataFrame的一列。所有序列的长度必须相同 |
Numpy的结构化/记录数组 | 类似于“由数组组成的字典” |
由Series组成的字典 | 每个Series会成为一列。如果没有显式指定索引,则各Series的索引会被合并成结果的行索引 |
由字典组成的字典 | 各内层字典会成为一列。键会被合并陈结果的行索引,跟“由Series组成的字典”的情况一样 |
字典或Series的列表 | 各项将会成为DataFrame的一行。字典键或Series索引的并集将会成为DataFrame的列标 |
由列表或元组组成的列表 | 类似于“二维ndarray” |
另一个DataFrame | 该DataFrame的索引将会被沿用,除非显式指定了其他索引 |
NumPy的MaskedArray | 类似于“二维ndarray”的情况,只是掩码值在结果DataFrame会变成NA/缺失值 |
如果设置了DataFrame的index和columns的name属性,则这些信息也会被显示出来
跟Series一样,values属性也会以二维ndarray的形式返回DataFrame中的数据
如果DataFrame个列的数据类型不同,则数值的数据类型就会选用能兼容所有列的数据类型