数据分析索引总结(上)Pandas单级索引

这篇博客详细介绍了Pandas数据框中单级索引的使用,包括loc、iloc和[]操作符。loc主要用于标签索引,其切片包含右端点,适用于行和列的标签定位;iloc则针对位置索引,注意切片不含右端点。[]操作符在特定情况下可能导致值比较,而非位置比较。博客还探讨了布尔索引、快速标量索引和区间索引的使用方法。
摘要由CSDN通过智能技术生成

 Datawhale干货 

作者:闫钟峰,Datawhale优秀学习者

寄语:本文对单级索引中的loc、iloc、[]三种方法进行了详细的阐述。同时,对布尔索引,快速标量索引方式、区间索引方式做了详细介绍。

读取csv数据的时候, 使用参数index_col指定表中的列作为索引

import numpy as np
import pandas as pd
df = pd.read_csv('data/table.csv',index_col='ID')
df.head()

效果等同于读取数据后, 使用set_index方法指定某一列为索引,但index_col的方式更简洁。

df1 = pd.read_csv('data/table.csv')
df2=df1.set_index(['ID'])
df2.head()
最常用的索引方法有三类:
  • loc表示标签索引
  • iloc表示位置索引
  • []也具有很大的便利性。

loc方法

注意:所有在loc中使用的切片全部包含右端点!
① 单行索引
df.loc[1103]
虽然这里的1103是整数, 但loc索引方式用的是索引标签, 而不是默认整数索引(注意默认整数索引和标签索引这二者有时候是一样的)
② 多行索引

多行索引时,需传入一个list,而不是多个索引

df.loc[[1102,2304]]
多行索引时, 传入的必须是一个list, 而不是两个或多个索引, 否则会报错
#以下索引报错
# TypeError: cannot do label indexing on <class 'pandas.core.indexes.base.Index'> with these indexers [2304] of <class 'int'>
df.loc[1102,2304]
list的切片方法可以沿用
df.loc[1304:].head()
和list的情形一样, 2402::-1表示从索引标签=2402的元素开始,以步长=1返回list的元素, 负号表示方向是从后向前。注意由于用的是loc, 所以这里的2402是标签索引, 这和list所用默认整数索引不一样。
df.loc[2402::-1].head()
③ 单列索引
使用loc方法获取列, 比直接使用列标签获取列更复杂
df.loc[:,'Height'].head()
等价的更简单的获取列的方法,loc和iloc的长处在于, 可以同时对列和行进行切片
df['Height'].head()
更简洁的使用列名标签索引的方式
df.Height.head()
④ 多列索引
df.loc[:,['Height','Math']].head()
# 等价于df[['Height','Math']].head()
注意传入的应该是list
df[['Height','Math']].head()
使用列名标签做切片---这是list里所没有的
df.loc[:,'Height':'Math'].head()
还可以使用iloc的方式进行切片, 这时候传入的应该是默认整数索引, 从0开始, 并且切片的结尾是不包含的
df.iloc[:,4:7].head()
切片方法对列名不成立,若使用报错如下:
# 以下语句报错
# TypeError: cannot do slice indexing on <class 'pandas.core.indexes.numeric.Int64Index'> with these indexers [Height] of <class 'str'>
df['Height':'Math'].head()
⑤ 联合索引
1102=起点,2401=终点,3=步长
df.loc[1102:2401:3,'Height':'Math']#.head()
⑥ 函数式索引
loc中使用的函数,传入参数就是前面的df;本质上这是一个布尔索引: lambda函数分别根据每行的Gender值列返回一个布尔值, 然后用这个布尔值序列来筛选df的行,布尔值为真则返回,否则筛选掉。
df.loc[lambda x:x['Gender']=='M'].head()
看起来和上述略有不同。但实际上, 使用loc等方法筛选行或者列的时候, 都是根据待筛选的行或者列对给定的筛选条件是否为真来决定是否返回该行或该列的。
def f(x):
    return [1101,1103]
df.loc[f]
⑦ 布尔索引
df.loc[df['Address'].isin(['street_7','street_4'])].head()
# 类似的sql语句为 select * from df where Address in ('street_7','street_4')
布尔值的Series

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值