DataFrame之iloc与loc的一些容易被忽略的区别

示例数据df1:
          A         B         C         D         E
0  0.299199  0.076892  1.378794 -1.607846 -0.763427
1 -0.061252  1.336151 -1.788529 -0.370140 -1.486368
2  0.665735 -0.233112 -0.485747 -1.321832 -0.083957
3 -0.319322 -0.756146 -0.997257  0.556998 -0.292198

示例数据df2:
          A         B         C         D         E
a  0.299199  0.076892  1.378794 -1.607846 -0.763427
b -0.061252  1.336151 -1.788529 -0.370140 -1.486368
c  0.665735 -0.233112 -0.485747 -1.321832 -0.083957
d -0.319322 -0.756146 -0.997257  0.556998 -0.292198

示例数据df3:
          A         B           C         D         E         F
0  0.299199  0.076892    1.378794 -1.607846 -0.763427  
1 -0.061252  1.336151   -1.788529 -0.370140 -1.486368  
2  0.665735 -0.233112  130.000000 -1.321832 -0.083957  
3 -0.319322 -0.756146   -0.997257  0.556998 -0.292198
备注: df1与df2唯一的区别在于它们的行索引不同

iloc与loc的共同点
1. 均可以用来访问DataFrae对象的行数据.eg:访问第3行第3列的元素

   # way-1. 使用iloc:   
      访问df1 : df1.iloc[2]['C']   or  df1.iloc[2,2]
      访问df2 : df1.iloc[2]['C']   or  df1.iloc[2,2]

   # way-2. 使用loc:
      访问df1 : df1.loc[2, 'C']
      访问df2 : df2.loc['c', 'C']

iloc与loc的不同点
1. 使用iloc时,行索引始终是df对象行的序数(eg:0,1,2,...,n-1),列索引可以是df对应列的列名,也可以是列的序数(eg:0,1,2,...,n-1); 
   使用loc时,行列索引必须与df保持一致;因此,如果仅仅是访问数据,iloc更加灵活.

2. 当向df对象中新加入一列,其元素为空字符串时[目的是占位], 不可通过iloc来进行赋值,使用loc则可以.
   # way -1. 使用iloc  [无法赋值]
     df3.iloc[2, 'F'] = 100
     SettingWithCopyWarning : A value is trying to be set on a copy of a slice from a DataFrame
   # way -2. 使用loc
     df3.loc[2, 'F'] = 100
     得到如下结果:
               A         B           C         D         E    F
     0  0.299199  0.076892    1.378794 -1.607846 -0.763427     
     1 -0.061252  1.336151   -1.788529 -0.370140 -1.486368     
     2  0.665735 -0.233112  130.000000 -1.321832 -0.083957  100
     3 -0.319322 -0.756146   -0.997257  0.556998 -0.292198     
    
   # 备注当向df对象加入新的列时,如果对应元素的需要在后期才能确定,应该先将其初始化为None,这样使用iloc和loc均可以在后期为新列中的元素赋值

3.在处理大批量数据时,如果需要先向df对象插入空列,在后期再填充空列中对应位置的元素,应优先考虑使用loc而不是iloc,因为前者的访问速度比后者快几十倍!!!
   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ReLuJie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值