不同数据维度对应的类
从一维、二维到三维数据对应的类分别为:Series
、DataFrame
和 Panel
,索引方式分别为:s.loc[indexer]
、df.loc[row_indexer, column_indexer]
和 p.loc[item_indexer, major_indexer, minor_indexer]
。
用常见的 Excel 来举例的话,Series
就是一行数据(一维)、DataFrame
就是一整张表(二维),而 Panel
则是整个Excel文件(三维,可能包含多张表)。
缺省切片
实际上,DataFrame
切片也不一定要传两个参数,Panel
切片也不一定要传三个参数,省略参数默认为空切片。例如,p.loc['a']
等价于 p.loc['a', :, :]
,效果是选择了一张数据表。
双引号
双引号指明间隔顺序,例如 s[::2]
表明从第一个元素开始每隔一个元素选择,而 s[::-1]
表明从最后一个开始往前选择。
索引的不同选择
.loc
方法主要适用于标签 的索引,出错时会报 KeyError
。
.loc
接受:
- 单个标签,例如
'a'
- 多个标签,例如
['a', 'b', 'c']
- 切片对象,例如
'a':'f'
('a'
和'f'
都包含在内) - 一个布尔数组
- 一个函数
.iloc
主要用于数字位置的索引,出错时会报 IndexError
。
.iloc
接受:
- 一个数字, 例如
5
- 一组数字, 例如
[4, 3, 0]
- 切片对象, 例如
1:7
(左闭右开) - 一个布尔数组
- 一个函数
通过布尔切片
1 | # 示例一 |
通过函数切片
1 | # 生成DataFrame |
交换DataFrame两列数据
正确的方法为:
1 | df[['B', 'A']] = df[['A', 'B']] |
以下交换方法不起作用,因为pandas规定 .loc
和 .iloc
列对齐操作在赋值操作之前:
1 | # 没有效果 |
at 和 iat
用处与 loc
和 iloc
类似,只不过 at
和 iat
只能获取单一Cell的数据,而 loc
和 iloc
可以获取一行、一列或者更复杂的数据。读单一Cell内数据的话, at
和 iat
会比loc
和 iloc
快很多。