一文读懂Python Pandas中loc&iloc用法

一、前言

        我们在使用python进行数据分析时,常需选取部分行列数据作组合运算,这就用到loc&iloc函数。

二、详细用法

        loc()函数使用索引标签获取行子集,iloc()函数通过行号(即位置)获取行子集。

1、首先生成一个csv文件作为实验DataFrame

import pandas as pd
import csv

with open('data.csv','w',encoding='utf-8',newline='') as csvfile:
    fieldnames = ['id','name','age','sex']
    writer = csv.DictWriter(csvfile,fieldnames)
    writer.writeheader()
    writer.writerow({'id':12,'name':'Tom','age':13,'sex':'woman'})
    writer.writerow({'id':13,'name':'Jack','age':14,'sex':'man'})
    writer.writerow({'id':14,'name':'Rose','age':15,'sex':'woman'})

df = pd.read_csv('data.csv',encoding='utf-8')
df.index = ['A','B','C']
print(df)

 2、选取不连续的行和列

2.1、选取不连续的行(列表嵌套的形式)

2.1.1、选取单行或位置不成等差数列的多行

#选取 索引标签为A 且位置为0 的单行
print(df.loc['A']) #loc
print('='*15)
print(df.iloc[0])  #iloc
print('*'*30)

#选取 索引标签为A和B 且位置为0和1 的多行
print(df.loc[['A','B']]) #嵌套列表形式
print('='*15)
print(df.iloc[[0,1]])
print('*'*30)

2.1.2、选取位置成等差数列的多行

        如选取位置为1、3、5、7...等行 。此时使用切片语法。(注意loc和iloc的区别

[A:B:C]
#若A、B、C代表索引位置,即运用iloc()函数,则表示从A开始(包括A) 到 B结束(不包括B) 每隔(C-1)个元素进行选取
#若A、B、C代表索引标签,即运用loc函数,则表示从A开始(包括A) 到 B结束(包括B) 每隔(C-1)个元素进行选取

        特别注意一下loc()函数

#间隔一行选取
print(df.iloc[0:2:2]) #选取了第一行
print('='*20)
print(df.loc['A':'C':2]) #选取A行和C行 特别注意这里不同于iloc的语法
print('*'*35)

#不写到哪结束,默认一直到最后一行
print(df.iloc[0::2])  
print('='*20)
print(df.loc['A'::2])
print('*'*35)

 

 2.2、选取不连续的列

[:,] #逗号将列表分成两部分,左边进行 行的操作,右边进行 列的操作

2.2.1、选取单列或位置不成等差数列的多列

#选取 索引标签为id 且位置为0 的单列
print(df.loc[:,'id'])
print('='*15)
print(df.iloc[:,0])
print('*'*30)

#选取 索引标签为name和age 且位置为0和1 的多列
print(df.loc[:,['id','name']])
print('='*15)
print(df.iloc[:,[0,1]])
print('*'*30)

2.2.2、选取位置成等差数列的多行

        语法同2.1.2

#从第1列开始(包括第一列)到第三列结束(不包括第3列)每隔一列选取
print(df.iloc[:,0:3:2]) #选取了第一列和第三列
print('='*20)
print(df.loc[:,'id':'sex':2]) #选取第一列和第三列
print('*'*35)

#不写到哪结束,默认一直到最后一列
print(df.iloc[:,0::2])  
print('='*20)
print(df.loc[:,'id'::2])
print('*'*35)

3、选取连续的行和列 (特别注意一下

##选取连续行 #注意一下
print(df.iloc[0:2])     #选取第1、2行
print('='*20)
print(df.loc['A':'C'])  #选取A、B、C即1、2、3行。这里切片语法 不同于 上面iloc的
print('*'*35)

##选取连续列 #注意一下
print(df.iloc[:,0:3])   #选取1、2、3列
print('='*20)
print(df.loc[:,'id':'sex']) #选取id、name、age、sex四列。这里切片语法 不同于 上面iloc的
print('*'*35)

 4、同时选取行和列

        同时选取行和列就是2、3两节语法的综合。

[index,columns] #逗号将列表分成两部分,左边进行 行的操作,右边进行 列的操作,将2、3节的语法填入即可

        以上就是本文的全部内容了,若有错误,欢迎各位读者批评指正! 

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

煮雨小筑

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

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

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

打赏作者

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

抵扣说明:

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

余额充值