pandas索引介绍2-布尔(逻辑)索引和混合索引

本文为IPython下的md文件直接导入生成

import pandas as pd
import numpy as np
T_data
#这里,我们首先来讲解pandas中利用布尔类型进行索引的方法
#筛选数据中Survivied为1的所有记录,即对行元素进行筛选
T_data.loc[T_data["Survived"]==1,]
PassengerId Survived Pclass Name Sex Age
A 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th… female 38.0
B 3 1 3 Heikkinen, Miss. Laina female 26.0
C 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0
H 9 1 3 Johnson, Mrs. Oscar W (Elisabeth Vilhelmina Berg) female 27.0
I 10 1 2 Nasser, Mrs. Nicholas (Adele Achem) female 14.0
#上述命令中,通过T_data["Survived"]这一简单方法提取了"Survived"这一列的数据,然后检验其是否大于一,
#由于是作用于对行的筛选,所以我们需要将这一布尔向量放到行索引的位置上
#为了方便展示作用于列上的索引,我们建立如下数据
Score={"Li Ming":pd.Series([78,90,87]),
       "Zhang Yan":pd.Series([88,56,94]),
       "Yin Hong":pd.Series([92,85,93])}
Pd_Score=pd.DataFrame(Score)
Pd_Score.index=["Math","Chinese","English"]
Pd_Score
Li Ming Yin Hong Zhang Yan
Math 78 92 88
Chinese 90 85 56
English 87 93 94
#筛选所有科目均大于80分的学生,此时是通过对相关行元素的判断来达到筛选列的目的,
#因此,需要分为两步,首先提出出相关行元素,进行判断
#第二,将判断的布尔结果作用于列的筛选上
bool_index=(Pd_Score.loc["Math"]>80)&(Pd_Score.loc["Chinese"]>80)&(Pd_Score.loc["English"]>80)
bool_index
Li Ming False Yin Hong True Zhang Yan False dtype: bool
Pd_Score.loc[:,bool_index]
Yin Hong
Math 92
Chinese 85
English 93
#将上述两步结合起来可写成如下命令
#我们更换了一种对行的索引方式
Pd_Score.loc[:,(Pd_Score.iloc[0]>80)&(Pd_Score.iloc[1]>80)&(Pd_Score.iloc[2]>80)]
Yin Hong
Math 92
Chinese 85
English 93
Pd_Score
Li Ming Yin Hong Zhang Yan
Math 78 92 88
Chinese 90 85 56
English 87 93 94
#接下来讲解另一种索引的方法,前面我们提到过使用iloc[]和loc[]两种方法分别通过下标索引和标签索引
#这两种方法的优点在于它将标签和下标索引的两种方式很好的进行了区分,但同样地,如果我们想同时进行下标和标签的索引,便行不通了
#事实上,Pandas库为我们还提供了另一种索引的方法ix,使用该方法便可以实现下标和标签的混合索引,
#然而,当你导入pandas库,第一次使用该方法时,pandas可能会提醒你,该方法已经不建议采用,在后续版本中也可能会被舍弃掉
#ix方法不被建议采用的原因主要还是在于其将下标和标签两种索引方式混合起来,可能会造成意想不到的后果,例如如果你的标签是数字,
#那么ix方法是很难区分你的索引目的是下标索引还是标签索引,而是用iloc[]或loc[]方法则无须担心,不过,在确认不会出错的情况下,
#ix方法还是能够在一定程度上方便我们的索引,在没被弃用之前,还是 可以体验一把的!^_^
Pd_Score.ix[:,[1]]
Yin Hong
Math 92
Chinese 85
English 93
Pd_Score.ix[0:2,"Li Ming"]
Math 78 Chinese 90 Name: Li Ming, dtype: int64
Pd_Score.ix[["Math"],0:2]
Li Ming Yin Hong
Math 78 92

你可能感兴趣的:(博文)