Pandas入门
Pandas 是 Python 的核心数据分析支持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。Pandas 的目标是成为 Python 数据分析实践与实战的必备高级工具,其长远目标是成为最强大、最灵活、可以支持任何语言的开源数据分析工具。经过多年不懈的努力,Pandas 离这个目标已经越来越近了。
Pandas 适用于处理以下类型的数据:
- 与 SQL 或 Excel 表类似的,含异构列的表格数据;
 - 有序和无序(非固定频率)的时间序列数据;
 - 带行列标签的矩阵数据,包括同构或异构型数据;
 - 任意其它形式的观测、统计数据集, 数据转入 Pandas 数据结构时不必事先标记。
 
Pandas 的主要数据结构是 Series(一维数据)与 DataFrame(二维数据),这两种数据结构足以处理金融、统计、社会科学、工程等领域里的大多数典型用例。对于 R 用户,DataFrame 提供了比 R 语言 data.frame 更丰富的功能。Pandas 基于 NumPy 开发,可以与其它第三方科学计算支持库完美集成。
Pandas 数据结构
Series
Series是一种类似于一维数组的对象,由下面两个部分组成:
- values:一组数据(ndarray类型)
 - index:相关的数据索引标签
 
Series的创建
由列表或numpy数组创建
1  | from pandas import Series  | 
1  | # 还可以通过设置index参数指定索引  | 
由字典创建
1  | # 字典的key对应Series的索引  | 
Series的索引和切片
可以使用中括号取单个索引(此时返回的是元素类型),或者中括号里一个列表取多个索引(此时返回的仍然是一个Series类型)。分为显示索引和隐式索引:
显式索引:
- 使用index中的元素作为索引值
 - 使用.loc[](推荐)
 
注意,此时是闭区间

隐式索引:
- 使用整数作为索引值
 - 使用.iloc[](推荐)
 
注意,此时是半开区间

Series的基本概念
可以把Series看成一个定长的有序字典
可以通过shape,size,index,values等得到series的属性
1  | s  | 
1  | s.shape  | 
可以通过head(),tail()快速查看Series对象的样式
1  | s.head(3)  | 
当索引没有对应的值时,可能出现缺失数据显示NaN(not a number)的情况
1  | s.loc[0] = np.nan  | 
可以使用pd.isnull(),pd.notnull(),或自带isnull(),notnull()函数检测缺失数据
1  | pd.isnull(s)  | 
Series对象本身及其实例都有一个name属性
1  | s.name = 'Series s'  | 
Series的运算
适用于numpy的数组运算也适用于Series
1  | s + 1  | 
Series之间的运算
- 在运算中自动对齐不同索引的数据
 - 如果索引不对应,则补NaN
 
1  | s1 = Series(np.random.randint(0,10,size=4),index=np.arange(0,4))  | 
- 注意:要想保留所有的index,则需要使用.add()函数
 
1  | # 使用pandas封装的运算函数,保留所有index对应value  | 
DataFrame
DataFrame是一个【表格型】的数据结构,可以看做是【由Series组成的字典】(共用同一个索引)。DataFrame由按一定顺序排列的多列数据组成。设计初衷是将Series的使用场景从一维拓展到二维。DataFrame既有行索引,也有列索引。
- 行索引:index
 - 列索引:columns
 - 值:values(numpy的二维数组)
 
DataFrame的创建
1  | from pandas import DataFrame  | 

DataFrame属性:values、columns、index、shape
1  | df.values  | 
DataFrame的索引
对列进行索引
- 通过类似字典的方式
 - 通过属性的方式
 
可以将DataFrame的列获取为一个Series。返回的Series拥有原DataFrame相同的索引,且name属性也已经设置好了,就是相应的列名。

1  | df['语文']  | 
1  | # 新增一列  | 

1  | # 新增一列的时候不能使用属性的写法  | 

1  | # 列切片  | 

1  | df[['数学', '英语', 'python']]  | 

1  | df.iloc[:, 1:4]  | 

对行进行索引
- 使用.loc[]加index来进行行索引
 - 使用.iloc[]加整数来进行行索引
 
同样返回一个Series,index为原来的columns。

对元素进行索引
使用列索引
使用行索引(iloc[3,1]相当于两个参数;iloc[[3,3]] 里面的[3,3]看做一个参数)
使用values属性(二维numpy数组)

DataFrame 索引总结
- 行索引用.loc, 列索索引用中括号.
 - 对元素的索引,先索引行,再索引列. df.loc[index, columns]
 - 如果还想返回DataFrame,那么使用两层中括号.
 
【注意】 直接用中括号时:
- 索引表示的是列索引
 - 切片表示的是行切片
 
DataFrame的运算
DataFrame之间的运算
同Series一样:
- 在运算中自动对齐不同索引的数据
 - 如果索引不对应,则补NaN
 
Series与DataFrame之间的运算
【重要】
使用Python操作符:以行为单位操作(参数必须是行),对所有行都有效。(类似于numpy中二维数组与一维数组的运算,但可能出现NaN)
使用pandas操作函数:
1
2axis=0:以列为单位操作(参数必须是列),对所有列都有效。
axis=1:以行为单位操作(参数必须是行),对所有行都有效。
归纳,总结
1  | 1, DataFrame和单个数字运算,每个元素分别运算.  |