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,因为前者的访问速度比后者快几十倍!!!
   

 

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: DataFrame的`loc`函数是一种基于标签的索引方式,用于按照行和列标签提取数据。它通过传入行和列的标签,可以精确地定位到数据的位置,并返回所需的数据。 `loc`函数的语法如下: ``` DataFrame.loc[row_indexer, column_indexer] ``` `row_indexer`和`column_indexer`可以是单个标签、标签列表、标签切片或布尔数组,用于指定要提取的行和列。 使用`loc`函数,可以实现以下操作: 1. 提取单个元素:可以通过指定行和列的标签,提取单个元素的值。 2. 提取多个元素:可以通过指定行和列的标签列表,提取多个元素的值。 3. 切片提取:可以通过行和列的标签切片,提取指定范围的数据。 4. 布尔索引提取:可以通过布尔数组来过滤数据,提取满足条件的行和列。 需要注意的是,`loc`函数是基于标签的索引方式,所有指定的行和列标签都必须存在于DataFrame中,否则会抛出KeyError异常。另外,使用`loc`函数进行提取操作时,返回的数据以DataFrame的形式返回。 总结起来,DataFrame的`loc`函数提供了一种基于标签的精确索引方式,可以方便地提取DataFrame中的数据,并支持单个元素、多个元素、切片和布尔索引等操作。 ### 回答2: DataFrame.loc函数是Pandas库中的一个方法,用于根据行标签和列标签来选择、切片和修改DataFrame中的数据。它是根据标签索引(label-based indexing)来定位数据的,可以通过行标签、列标签或者二者的组合来达到定位数据的目的。 使用loc函数时,我们需要在方括号中指定要选择的行(行标签)和列(列标签),并用逗号隔开。例如:df.loc[row_label, col_label]。这样可以准确定位到某行某列的数据。 还可以通过传入切片对象或布尔列表进行选择和修改数据。切片对象用来选取一定范围内的行或列,而布尔列表则可以根据条件选择满足条件的行或列。 此外,还可以利用loc函数给选定的位置赋值。例如:df.loc[row_label, col_label] = new_value。这个功能在需要修改或替换数据时非常有用。 使用loc函数具有以下优点: 1. 可以通过行标签和列标签来准确选择数据,非常方便。 2. 可以使用切片对象和布尔列表进行更加灵活的数据筛选和修改。 3. 可以直接在选定的位置赋值,极大地提高了数据处理的效率和便利性。 总之,loc函数是Pandas库中操作DataFrame数据的重要方法,能够方便地定位和处理具有行标签和列标签的数据,使数据的选择、切片和修改变得简单而高效。 ### 回答3: DataFrameloc函数是Pandas库中用于按标签筛选数据的函数。通过loc函数,可以根据行标签和列标签来访问和操作DataFrame中的数据。 在使用loc函数时,我们可以传入一个行标签和一个列标签,也可以传入一个切片对象。当传入一个标签时,loc函数会根据该标签去定位数据,返回一个Series对象,其中索引是列名,值是对应的数据。如果标签不存在,则会引发KeyError异常。 可以通过loc函数来获取DataFrame中的某一行或多行数据,此时需要传入行标签。同时也可以获取某个或多个特定的列数据,此时需要传入列标签。还可以传入行标签和列标签,获取指定的行和列交叉点的数据。 另外,利用loc函数还可以进行条件筛选,满足条件的数据将被选中。例如,可以根据某一列的数值范围进行筛选,或者根据多个条件的组合来进行筛选。 总之,DataFrameloc函数是一个十分灵活和强大的工具,用于按标签选取数据并进行各种操作。通过熟练掌握它的使用方法,可以更加便捷和高效地处理DataFrame中的数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

ReLuJie

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

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

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

打赏作者

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

抵扣说明:

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

余额充值