Pandas数据分析-Task3

Pandas数据分析-Task3

记录DataWhale的Pandas数据分析的学习过程,使用的教材为 joyful-pandas
Task3是pandas的索引相关的知识,先介绍了基本的索引器,包括df[],loc[],iloc[],query(),sample()。接着介绍了多级索引的相关知识,通过pd.MultiIndex.from_product()函数来构造多级索引,IndexSlice对象对多级索引切片。第三部分介绍了索引的常用方法,包括索引层交换reorder_levels(),索引层删除droplevel(),索引轴重命名rename_axis(),索引值重赋值rename(),设置索引set_index()和删除索引reset_index(),最后是练习题。本篇文章中所有的代码示例中用到的原始文件都可以在 此链接中下载。

索引器

基本索引

1 DataFram基本索引
与numpy中的索引和python列表中的所有都有些差别。因为以前老是记混,这里比较一下。

l=[[1,2,3],[4,5,6]]
ndarray=np.array(l)
df=pd.DataFrame(ndarray)

#分别对第一个元素进行索引
l[0][0] #列表的行列索引分别用两个不同的[][]表示。
ndarray[0,0] #numpy中的行列索引都在一个[]内,行列之间用逗号分隔
df[0] #df的基本索引只有一个[]符号,且与numpy不同的是只能索引列,不能索引行。
  • 当需要一次性索引多列时,将需要索引的列组成列表:[列名1,列名2],以教材中的数据为例:
df = pd.read_csv('data/learn_pandas.csv',usecols = ['School', 'Grade', 'Name', 'Gender','Weight', 'Transfer'])
df[['School','Grade']].head() #同时索引School和Grade列
  • 当一次只索引一列时,可以用 df.列名
#下面这两个句子效果一样。
df['School']
df.School 

2 Series基本索引
Series的基本索引与DataFrame的基本索引基本类似。和DateFrame基本索引的区别在于Series的索引除了可以用字符串做索引关键字外,还可以使用整数索引。例如:

s = pd.Series([1, 2, 3, 4, 5, 6],index=['a', 'b', 'a', 'a', 'a', 'c']) #索引可以为重复的值。
s[1] #整数索引
s['b'] #字符串索引
#上面这两个索引语句输出的值是一样的。

一个有意思的比较是切片,可以使用整数索引做切片(整数索引是从0开始的),也可以使用字符串索引。字符串切片索引是闭区间,同时包含起始值和终止值,而整数切片索引是前闭后开空间,不包含终止值
同时, 对于字符串索引的方法来说,用于切片的起始值和终止值必须是唯一的,例如,s[‘a’:‘c’]这种写法就是错误的,因为索引‘a’在序列s的索引中多次出现,不是唯一值。

s = pd.Series([1, 2, 3, 4, 5, 6],index=['a', 'b', 'a', 'a', 'a', 'c'])
s[1:5] #整数切片,不包含终止值
>b    2
a    3
a    4
a    5
s['b':'c'] #字符串切片,包含终止值。
>b    2
a    3
a    4
a    5
c    6

loc索引与iloc索引

基本索引有很大局限性,特别是对于DataFrame,不能直接索引列。loc[]与iloc[]索引器可以可以同时索引行和列,其形式为 loc[[行索引列表],[列索引列表]],若只输入一个索引值,loc[#]表示的是行索引。loc[]与iloc[]的基本用法都是一样的,差别在于loc[]是基于元素的索引器([]中索引的值参数就是DataFrame的索引的名字),而iloc[]是基于位置的所引起([]中索引的参数是代表位置的正整数)。
loc[]索引的输入有5中形式:单个元素,元素列表,元素切片,布尔列表,函数。其中,单个元素,元素列表,元素切片都比较简单。

df = pd.read_csv('data/learn_pandas.csv',usecols = ['School', 'Grade', 'Name', 'Gender','Weight', 'Transfer'])
df_demo = df.set_index('Name') #设置Name为索引
print(df_demo.loc['Mei Sun']) #单个元素索引,索引出一行(若存在重复值输出的为DataFrame)
print(df_demo.loc[:,'School'].head())#索引出’School‘列
print(df_demo.loc[['Mei Sun','Xiaoli Qian']])# 元素列表做索引
print(df_demo.loc['Xiaoli Qian':'Changqiang Yang']) 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值