【joyful pandas 03】索引

感谢datawhale,内容来自GYH joyful pandas

索引器

索引

  1. 表的列索引
    在取单独索引的时候df['Name']等价于df.Name
  2. Series的行索引
  • 以字符串作为索引值
# 如果想要取出某两个索引之间的元素,并且这两个索引是在整个索引中唯一出现,则可以使用切片,,同时需要注意这里的切片会包含两个端点:
s = pd.Series([1, 2, 3, 4, 5, 6], index=['a', 'b', 'a', 'a', 'a', 'c'])
s['c': 'b': -2]
#c    6
#a    4
#b    2
#dtype: int64

前面提到,当使用字符串作为索引时,进行切片两边都能取到,但是,在使用整数作为Series的所引时,不包含右端点。

loc的用法

对数据表的行进行选取,需要用到两个方法,loc或是iloc,其中loc方法是基于元素的索引器,而iloc则是基于位置的索引器

loc索引器的一般形式是loc[*, *],其中第一个*代表行的选择,第二个*代表列的选择,如果省略第二个位置写作loc[*],这个*是指行的筛选。其中,*的位置一共有五类合法对象,分别是:单个元素、元素列表、元素切片、布尔列表以及函数,下面将依次说明。

数据显示

  • 取单个元素的时候
    在这里插入图片描述
  • 取元素列表
    在这里插入图片描述
  • 使用loc进行切片的时候,需要考虑到其起点和终点。其切片会包含两端的值,如果唯一则运行,不唯一则会报错。
    如果dataframe使用整数索引的时候,同样是对元素进行切片,而且包含两端,中间的索引不允许有重复值。
  • 在loc里面加入布尔值进行判断,在以后的数据处理中目测会进行使用
  • 在这里插入图片描述
    可以使用isin方法返回布尔列表,传入元素列表
    在这里插入图片描述
    卧槽,iloc真是改变我的数据切割的看法,使用复合条件配合咯从进行切割,数据很舒爽
    在这里插入图片描述

select_dtypes是一个实用函数,它能够从表中选出相应类型的列,若要选出所有数值型的列,只需使用.select_dtypes('number'),请利用布尔列表选择的方法结合DataFramedtypes属性在learn_pandas数据集上实现这个功能。


loc函数同时也支持像放自定义函数和匿名函数,但是函数的结果必须是和上图一样的条件。

iloc索引器

跟loc类似

query方法

在pandas中,可以通过query方法,直接导入字符串形式来查询数据。每一个条件都使用了文本格式。

df.query('((School == "Fudan University")&'
         ' (Grade == "Senior")&'
         ' (Weight > 70))|'
         '((School == "Peking University")&'
         ' (Grade != "Senior")&'
         ' (Weight > 80))')
         

在这里插入图片描述
用query基本上就是带上了用上了中文进行判别,直接就是英语判断,好家伙!但是必须是能够在loc页面能导出数据的语句。
Note
对于含有空格的列名,需要使用col name的方式引用
啊,这也行哒
看到上面这种语法,我尼玛人都懵了。
我爱query
在这里插入图片描述

随机抽样

在把dataframe作为一整个数据集的时候,把每一行看作一个样本而每一列看作一个特征。此时可以使用sample进行抽样。有时在拿到大型数据集后,想要对统计特征进行计算来了解数据的大致分布,但是这很费时间。同时,由于许多统计特征在等概率不放回的简单随机抽样条件下,是总体统计特征的无偏估计,比如样本均值和总体均值,那么就可以先从整张表中抽出一部分来做近似估计。
sample函数中的主要参数为n, axis, frac, replace, weights,前三个分别是指抽样数量、抽样的方向(0为行、1为列)和抽样比例(0.3则为从总体中抽出30%的样本)。

replaceweights分别是指是否放回和每个样本的抽样相对概率,当replace = True则表示有放回抽样。例如,对下面构造的df_samplevalue值的相对大小为抽样概率进行有放回抽样,抽样数量为3。
在这里插入图片描述

二级索引

二级索引的构造与调取

在这里插入图片描述
此处构造二级索引的方式,将在下一次的笔记中展示,这里看到的行索引、列索引都是以Multiindex的形式,在图中可以看到,行索引和列索引只保留了出现一次的位置,这样增强了图表的可读性。

df_multi.index.names  # 获取索引的名字
df_multi.index.values  # 获取索引的值
df_multi.index.get_level_values(0)  # 获得第一层的索引值

以上是取得多级索引的相关方法

在多级索引中使用loc方法

  • 在对多级索引使用loc或是iloc方法时,和之前的单级索引类似,之前之前传入的是标量,在多级索引中应当传入元组。

在取索引前应该对Multi Index进行排序,以避免性能警告。这句话并实施比很懂,可能经历的还不够多,没遭遇性能警告

df_multi = df_multi.sort_index()
df_multi.loc[('Fudan University', 'Junior')].head()

在这里插入图片描述
在这里插入图片描述

res = df_multi.loc[(['Peking University', 'Fudan University'], ['Sophomore', 'Junior']), :]
res.head()

以上的例子会根据输入的元组的条件多元素进行筛选。输入两列index进行筛选,然后输出其余的全部列。这种形式与一下的形式不同在于,上面传入的是元组即进行交叉组合,而下面这种情况则传入的列表,其对应生成的是北大大三的学生和复旦大二的学生。
在这里插入图片描述

IndexSlice对象

使用IndexSlice进行分层切片,首先需要将进行定义,idx = pd.IndexSlice
其中按照loc[idx[*,*]] 的格式可以获取切片
在这里插入图片描述
其中的('D','f')分别是对列的选择,这里的列有两个索引,所以需要两级放上去。
另外idx也可以输入布尔值
在这里插入图片描述
其中的x是指原数据表,先进行布尔值判断再进行切片。(表达顺序还是要捋清楚的,先是内部函数的表达,再到外面进行处理)。
在这里插入图片描述
以上的形式可以分别对行和列同时进行多层切片。

多级索引的构造

索引的常用方法

索引层的交换和删除

可以使用swaplevelreorder_levels进行操作,由于说前者能做的后者也能做,前者不能做的后者还能做,于是这里暂时只介绍后一种办法:
先构造一个多维索引:

np.random.seed(0)
L1,L2,L3 = ['A','B'],['a','b'],['alpha','beta']
mul_index1 = pd.MultiIndex.from_product([L1,L2,L3], names=('Upper', 'Lower','Extra'))
L4,L5,L6 = ['C','D'],['c','d'],['cat','dog']
mul_index2 = pd.MultiIndex.from_product([L4,L5,L6], names=('Big', 'Small', 'Other'))
df_ex = pd.DataFrame(np.random.randint(-9,10,(8,8)), index=mul_index1,  columns=mul_index2)
df_ex

在这里插入图片描述

df_ex.reorder_levels([2,0,1],axis=0).head() # 列表数字指代原来索引中的层

在这里插入图片描述
删除某一层索引可以使用droplevel 方法,其中输入的参数与reorder类似

索引属性的修改

# 这里索引层的名字的的修改使用rename_axis函数,输入的修改办法是传入字典参数
df_ex.rename_axis(index={'Upper':'Changed_row'}, columns={'Other':'Changed_Col'}).head()
# 使用rename对索引值进行修改,多层索引需要传入修改的层号
df_ex.rename(columns={'cat':'not_cat'}, level=2).head()
# 也可以再里面传入匿名函数,才发现匿名函数这么好用
df_ex.rename(index=lambda x:str.upper(x), level=2).head()
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值