5.Python中pandas对Series与DataFrame对象的索引与切片详解

1.Series对象索引和切片

loc与iloc的使用方式

import pandas as pd
import numpy as np

# 创建Series对象
data = pd.Series([4,3,25,2,6], index=list('abcde'))

# 索引
# 根据普通key值获取值
print('根据普通key值获取值:',data['a'])
# 根据正位置索引获取值
print('根据正位置索引获取值:',data[2])
# 根据负位置索引获取值
print('根据负位置索引获取值:',data[-2])

# 切片
# 1.普通索引:data['key1':'key2'] 是 ['key1':'key2']
print('1.普通索引:\n', data['a':'c'])
# 2.位置索引:data[x:y] 是 [x:y) 【第一个位置:最后一个位置(不包括):间隔的位置】
print('2.位置索引:\n', data[0:4:2])
# 3.利用索引进行筛选数据
print('3.筛选大于5的数据:\n',data[data>5])

# loc(通过普通索引)与iloc(通过位置索引获取)的使用:当我们的普通索引也是数字,与位置索引相重复时,就需要使用(都是不包含结束值)
data2 = pd.Series([5,2,56,13,11],index=[1,2,3,4,5])
print('loc通过普通索引获取值:\n',data2[1:3])
print('iloc通过位置索引获取值:\n',data2[1:3])

在这里插入图片描述

2.DataFrame对象列的选择

2.1DataFrame列对象的索引和切片

import pandas as pd
df = pd.read_excel('stu_data.xlsx')
# 设置显示的行数
pd.options.display.max_rows = 8

# 获取列的方式
# 方式1:获取单列 df[col]
print('方式1:获取单列:\n', df['学号'])
# 方式2:获取多列 df[[col1, col2]]
print('方式2:获取多列:\n', df[['学号','性别']])
# 方式3:使用loc通过普通索引来获取 df.loc[普通行索引:普通列索引]
df = df.set_index(['学号'])
print('方式3:使用loc通过普通索引来获取行:\n', df.loc[1510248008:1512332010])
print('方式3:使用loc通过普通索引来获取列:\n', df.loc[:,'性别':'体重'])

# 方式4:使用iloc通过位置索引来获取 df.iloc[位置行索引:位置列索引]
print('方式4:使用iloc通过位置索引来获取行:\n', df.iloc[3:7])
print('方式4:使用iloc通过位置索引来获取列:\n', df.iloc[1:3])

# 方式5:获取多列数据
print("方式5:获取多列数据:\n", df.loc[:,['体重','性别']])

# 方式6:获取多行数据
print("方式6:获取多行数据:\n", df.loc[[1510248008,1512108019],:])

# 筛选数据:筛选身高高于185的学生
print("筛选数据:筛选身高高于185的学生:\n",df[df['身高']>185])

# 筛选数据:筛选身高高于170的女生
print('筛选数据:筛选身高高于170的女生:\n',df[(df['身高'] > 170) & (df['性别'] =='女')])

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

2.2 DataFrame对象的索引和切片

df = pd.read_excel('stu_data.xlsx')
# 设置显示的行数
pd.options.display.max_rows = 8
# 设置行索引
df = df.set_index('学号')

# 1.通过普通行索引获取单行值
print('1.通过普通行索引获取值:\n',df.loc[1510248008])
# 2.通过位置行索引获取单行值
print('2.通过位置行索引获取值:\n',df.iloc[0])
# 3.通过普通行索引获取多行值
print('3.通过普通行索引获取多行值:\n',df.loc[[1510248008,1510229019,1512108019]])
# 4.通过位置行索引获取多行值
print('4.通过位置行索引获取多行值:\n',df.iloc[[0,1,2]])
# 5.通过普通行索引切片获取多行值(必须要唯一索引)
print('5.通过普通行索引切片获取多行值:\n',df.loc[1510248008:1512108019])
# 6.通过位置行索引切片获取多行值
print('6.通过位置行索引切片获取多行值:\n',df.iloc[0:2])
# 7.通过普通行索引获取部分行部分列
print('7.通过普通行索引获取部分行部分列:\n',df.loc[[1510248008,1540294017],["性别","身高"]])
# 8.通过位置行索引获取部分行部分列
print('8.通过位置行索引获取部分行部分列:\n',df.iloc[[0,1],[0,1]])
# 7.通过普通行索引切片获取部分行部分列
print('7.通过普通行索引切片获取部分行部分列:\n',df.loc[1510248008:1540294017,["性别","身高"]])
# 8.通过普通行索引切片获取部分行部分列
print('8.通过普通行索引切片获取部分行部分列:\n',df.iloc[0:3,[0,1]])
# 9.筛选数据:获取身高高于170的性别和体重
print("9.筛选数据:获取身高高于170的性别和体重:\n", df[df['身高']>170][['性别','体重']])

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

想成为数据分析师的开发工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值