可以将Index视为一个不可变数组或有序集合 。当作为不可变数组时,一般数组的访问方式(例如切片等)对Index适用,与数组的最大区别是 Index对象不可更改。当作为集合时,Index也可以做交集、并集等常规操作 。
Series的访问既可以作为字典,也可以作为一维数组 。数据访问的方法,可以参考Numpy的访问方式,这里不赘述 。
如果Series的显式索引是整数,那么在访问时,很容易混淆 。例如下边的例子:
从上边的例子总结得出,python的默认规则是:在单个访问时,使用的显式索引,而在切片时,使用的是隐式索引,很容易混淆!python提供了loc、iloc和ix三种索引器 。
loc表示:表示取值和切片都是显式的 。iloc 属性,表示取值和切片都是隐式索引 。ix是loc和iloc的混合形式,应用于dataFrame(使用例子在3.3节) 。
dataframe可以通过对列名进行字典形式(dictionary-style)的取值获取数据 。可以把 DataFrame 看成是一个增强版的二维数组,用 values 属性按行查看数组数据 。ix 索引器对于整数索引的处理和之前在 Series 对象中介绍的一样,都容易让人混淆 。
对于一元运算(像函数与三角函数),这些通用函数将在输出结果中保留索引和列标签(很简单,所有元素做相应运算并返回);而对于二元运算(如加法和乘法),Pandas 在传递通用函数时会自动 对齐索引 进行计算 。
当在两个 Series 或 DataFrame 对象上进行二元计算时,Pandas 会在计算过程中对齐两个对象的索引 。如果想给缺失数值指定一个默认值,需要使用add来替代+,并指定fill_value:
两个对象的行列索引可以是不同顺序的,结果的索引会自动按顺序排列 。
DataFrame 和 Series 的运算规则,与NumPy 中二维数组与一维数组的运算规则是一样的 。需要使用广播原则,那么默认地,会按行计算 。如果想要按列运算,需要使用参数axis = 0。
注意:DataFrame访问行可以使用loc,但是访问列,只能是df['col']这种形式了 。
缺失值有三种形式:null、NaN 或 NA 。
处理缺失值,一般有两种方法:一种方法是通过一个覆盖全局的掩码表示缺失值,另一种方法是用一个标签值(sentinel value)表示缺失值 。
掩码是利用一个跟原来一样大小的矩阵,用0或者1表示某个元素缺失 。标签值是利用一个特殊字符例如NaN表示缺失 。
Pandas 选择用标签方法表示缺失值,包括两种 Python 原有的缺失值: 浮点数据类型(包括整型) 的 NaN 值,以及 Python的 None 对象。
使用None时,表示一个空的python对象,所以numpy的dtype=object,因为是对象所以在进行大批量计算时,效率会比标量低 。使用np.nan时表示标量,效率会高很多 。
对于缺失值,pandas提供了几个有用的API方法,分别是:isnull(),notnull(),dropna(),fillna() 。其中,对于dataframe,dropna()方法默认会将包含NaN的整行都drop掉,如果想按照整列drop,增加axis=1参数 。
pandas的MultiIndex提供了多级索引的功能,用元组表示是多级索引的基础 。
下面例子,使用元组索引生成Series 。筛选2019的索引,非常繁琐 。
Pandas 的 MultiIndex 类型提供多种实现方法,下边例子使用元组表示实现 。
unstack() 方法可以快速将一个多级索引的 Series 转化为普通索引的DataFrame 。stack() 方法实现相反的效果 。
总结一下,创建多级索引的方法包括:
(1)通过一个有不同等级的若干简单数组组成的列表来构建 MultiIndex:pd.MultiIndex.from_arrays 。
(2) 多个索引值的元组构成的列表创建 MultiIndex:pd.MultiIndex.from_tuples 。
(3)用两个索引的笛卡尔积创建MultiIndex:pd.MultiIndex.from_product 。
(4)直接提供 levels和labels创建 MultiIndex(lablels是指每个级别的整数指定每个位置):
上边的例子中,不管是Series还是DataFrame都是按照行来进行多级索引,其实,也可以按列索引,而且非常简单,下边是一个例子(几个学生在2018和2019两次考试的不同科目成绩):
需要对多级索引做显示切片操作时,可以使用pd.IndexSlice对象来切,不同级别的维度,拿逗号分割,例如下边例子中的df_sd_003.loc[idx_sd[2018,:],idx_sd['Alice',:]] 。其他切片和取值操作与Numpy很类似 。
如果 MultiIndex 不是有序的索引,那么大多数切片操作都会失败 。
如果Series或者DataFrame的索引是未排序的,可以简单地通过sort_index方法来快速排序 。
层级数据维度转换的另一种方法是行列标签转换,可以通过reset_index 方法实现
通过pd.concat()实现pandas对象合并,pd.cancat的所有参数(下面列举的是这些参数的默认值):
秒懂生活扩展阅读
- 怎么从树上取树脂
- 埋在地下的自来水管冻了怎么办
- 果粒橙怎么做
- 怎么设置阻止陌生号码的来电
- 莜组词莜的组词莜怎么组词
- 搜狗输入法怎么预想输入
- 炸酥肉起泡沫怎么解决
- 香烟怎么查真伪查询
- 家庭总收入怎么算贫困
- 镁和氧化性酸反应会怎么样