Pandas 学习
import numpy as np
import pandas as pd
一、索引
1. 表的列索引
列索引,一般用[列名]或[列名组成的列表]
从Dataframe中取出对应的列,单列为Series,多列则为一个新的Dataframe
若要取出单列,且列名中不包含空格,则可以用 .列名
取出,这和 [列名]
是等价的
2. 序列的行索引
如果取出单个索引的对应元素,则可以使用 [item]
,若 Series
只有单个值对应,则返回这个标量值,如果有多个值对应,则返回一个 Serie
然后把这些item改为整数,它的用法没有什么区别
不要把纯浮点以及任何混合类型(字符串、整数、浮点类型等的混合)作为索引
3.loc索引器
对于表来讲,有两种索引器,一种是基于元素的loc,一种是基于位置的iloc
loc 索引器的一般形式是 loc[*, ] ,其中第一个 * 代表行的选择,第二个 * 代表列的选择,如果省略第二个位置写作 loc[] ,这个 * 是指行的筛选。其中, * 的位置一共有五类合法对象,分别是:单个元素、元素列表、元素切片、布尔列表以及函数
*
为单个元素,元素列表
如果选择多行多列,需要用列表的形式对所需要的行与列选择出来*
为切片
如果DataFrame
使用整数索引,其使用整数切片的时候和上面字符串索引的要求一致,都是 元素 切片,包含端点且起点、终点不允许有重复值。
切片时是在dataframe所选的列自上而下的切*
为布尔列表
在实际的数据处理中,根据条件来筛选行是极其常见的,此处传入 loc 的布尔列表与 DataFrame 长度相同,且列表为 True 的位置所对应的行会被选中, False 则会被剔除
也可以通过isin
方法返回的布尔列表等价,可以用来查询符合条件的数据
对于复合条件而言,可以用|(或), &(且), ~(取反)
的组合来实现*
为函数
函数必须是以前面的四种合法形式之一为返回值,并且函数的输入值为 DataFrame 本身。假设仍然是上述复合条件筛选的例子,可以把逻辑写入一个函数中再返回
支持使用lambda
表达式,其返回值也同样必须是先前提到的四种形式之一
由于函数无法返回如 start: end: step 的切片形式,故返回切片时要用 slice 对象进行包装
df_demo.loc[lambda x: slice('Gaojuan You', 'Gaoqiang Qian')]
4. iloc索引器
iloc
的使用与 loc
完全类似,只不过是针对位置进行筛选,在相应的 *
位置处一共也有五类合法对象,分别是:整数、整数列表、整数切片、布尔列表以及函数,函数的返回值必须是前面的四类合法对象中的一个,其输入同样也为 DataFrame
本身
在使用布尔列表的时候要特别注意,不能传入 Series 而必须传入序列的 values ,否则会报错
对 Series 而言同样也可以通过 iloc 返回相应位置的值或子序列
5. query方法
支持把字符串形式的查询表达式传入 query
方法来查询数据,其表达式的执行结果必须返回布尔列表。在进行复杂索引时,由于这种检索方式无需像普通方法一样重复使用 DataFrame
的名字来引用列名,一般而言会使代码长度在不降低可读性的前提下有所减少
在query
表达式中,可以使用Series
的方法,与正常的函数调用没有什么区别
在 query
中还注册了若干英语的字面用法,帮助提高可读性,例如: or, and, or, is in, not in
在字符串中出现与列表的比较时, == 和 !=
分别表示元素出现在列表和没有出现在列表,等价于 is in 和 not in
对于 query 中的字符串,如果要引用外部变量,只需在变量名前加 @
符号
6. 随机抽样
如果把 DataFrame 的每一行看作一个样本,或把每一列看作一个特征,再把整个 DataFrame 看作总体,想要对样本或特征进行随机抽样就可以用 sample 函数
sample 函数中的主要参数为 n, axis, frac, replace, weights
,前三个分别是指抽样数量、抽样的方向(0为行、1为列)和抽样比例(0.3则为从总体中抽出30%的样本)。
replace 和 weights 分别是指是否放回和每个样本的抽样相对概率,当 replace = True 则表示有放回抽样
总结
加油,明天考试。