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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值