python中pandas包中的DataFrame有关操作iloc与.loc的区别

import numpy as np  
import pandas as pd  
df = pd.DataFrame(np.arange(0,60,2).reshape(10,3),columns=list('abc'))
print(df)
df得到的数据是
    a   b   c
0   0   2   4
1   6   8  10
2  12  14  16
3  18  20  22
4  24  26  28
5  30  32  34
6  36  38  40
7  42  44  46
8  48  50  52
9  54  56  58


可以根据每列的索引采用.loc来获取每一列的值,例如df['b']就是取的索引为b的这一列,df['b']的结果如下:

0     2
1     8
2    14
3    20
4    26
5    32
6    38
7    44
8    50
9    56
Name: b, dtype: int32
还可以通过每一行的索引和列的索引,把需要的行和列单独取出来.loc主要是针对字符串的,当索引是字符串那么就用.loc,如果索引是数字,
那么就是用.iloc。其实两者的功能差不多,下面举一些.
df.loc[0, 'a']#求得只是第一行第一列的数字

输出:0


df.loc[0:3, ['a', 'b']]#取出0,1,2,3行的a,b两列,
                       #如果只取一列那么就这样写df.loc[0:3, 'a']
                       #如果取多列,那么要把列用[]放在一起如df.loc[0:3, ['a', 'b']]

输出:
   a   b
0  0   2
1  6   8
2  12  14
3  18  20



#不想抽取连续的行和列,那么就需要用[]把要取的行和列都列出来
#如下
df.loc[[1, 5], ['b', 'c']]与df.loc[[1, 5]][['b', 'c']]一个意思,顺带提一下,有的书里面会出现这种格式,很难查到资料,所以在此记录一下
输出:

    b   c
1   8  10
5   32  34


如果我们嫌column name太长了,输入不方便,有或者index是一列时间序列,更不好输入,那就可以选择 .iloc了。这边的 i 我觉得代表index,比较好记点。
df.iloc[1,1]



输出:8
df.iloc[0:3, [0,1]]


输出:
    a   b
0   0   2
1   6   8
2  12  14
3  18  20
.iloc让行列切片成为可能,很方便

df.iloc[[0, 3, 5], 0:2]  #补充一下使用切片的列表不包含最后一个数,所以列只取0,1列


输出:
   
  a   b
0   0   2
3  18  20
5  30  32


df.iloc[:, :]#取出所有的行和列
df.loc[:][:]#与上面一回事



输出:
     a   b   c
0   0   2   4
1   6   8  10
2  12  14  16
3  18  20  22
4  24  26  28
5  30  32  34
6  36  38  40
7  42  44  46
8  48  50  52
9  54  56  58



还有一种就是如下的格式,意思是取出df中第a列中元素等于6的那一行的b列和c列
df.loc[df['a'] == 6][['b', 'c']]





输出:

   b   c
1  8  10












  • 8
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值