pandas中loc、iloc、at、iat的区别

 废话不多说,直接上代码

import pandas as pd

if __name__ == "__main__":

    data = [["lucy", "female", 17], ["lilei", "male", 18],["hanmeimei", "female", 17],["lily", "female", 16]]
    index = ['a', 'b','c','d']
    columns = ['name', 'sex', 'age']
    df = pd.DataFrame(data=data, index=index, columns=columns)
    print("*" * 10,"获取所有数据","*" * 10)
    print(df.loc[:])
    print("*" * 10,"获取第一行数据","*" * 10)
    print(df.loc["a",:])
    print("*" * 10,"获取第一行,第二列数据","*" * 10)
    print(df.loc["a","sex"])
    print("*" * 10,"获取前两行,前两列数据","*" * 10)
    print(df.loc[:"b",:"sex"])
    print("*" * 10,"获取第一、三行,第一、三列列数据","*" * 10)
    print(df.loc[['a','c'],['name','age']])
    # print(df.loc[1,2]) #报错:KeyError:
    print("*" * 20, "iloc", "*" * 20)
    print("*" * 10, "获取所有数据", "*" * 10)
    print(df.iloc[:])
    print("*" * 10, "获取第一行数据", "*" * 10)
    print(df.iloc[0, :])
    print("*" * 10, "获取第一行,第二列数据", "*" * 10)
    print(df.iloc[0, 2])
    print("*" * 10, "获取前两行,前两列数据", "*" * 10)
    print(df.iloc[:2, :2])
    print("*" * 10, "获取第一、三行,第一、三列列数据", "*" * 10)
    print(df.iloc[[0, 2], [0, 2]])
    # print(df.iloc["a", "sex"]) #ValueError: Location based indexing can only have [integer, integer slice
    print("*" * 20, "at", "*" * 20)
    print("*" * 10, "获取第一行、第一列数据", "*" * 10)
    print(df.at["a","name"])
    # print(df.at["a":"c","name":]) #TypeError: unhashable type: 'slice'
    # print(df.at[1, 2]) #KeyError: 2
    print("*" * 20, "iat", "*" * 20)
    print("*" * 10, "获取第一行、第一列数据", "*" * 10)
    print(df.iat[0, 0])
    print("*" * 10, "==", "*" * 10)
    # print(df.iat[0:2, 0]) #ValueError: iAt based indexing can only have integer indexers
    # print(df.iat["a", "sex"]) #ValueError: iAt based indexing can only have integer indexers
    # df.ix["a":"c","name":"age"] #AttributeError: 'DataFrame' object has no attribute 'ix'

输出:

********** 获取所有数据 **********
        name     sex  age
a       lucy  female   17
b      lilei    male   18
c  hanmeimei  female   17
d       lily  female   16
********** 获取第一行数据 **********
name      lucy
sex     female
age         17
Name: a, dtype: object
********** 获取第一行,第二列数据 **********
female
********** 获取前两行,前两列数据 **********
    name     sex
a   lucy  female
b  lilei    male
********** 获取第一、三行,第一、三列列数据 **********
        name  age
a       lucy   17
c  hanmeimei   17
******************** iloc ********************
********** 获取所有数据 **********
        name     sex  age
a       lucy  female   17
b      lilei    male   18
c  hanmeimei  female   17
d       lily  female   16
********** 获取第一行数据 **********
name      lucy
sex     female
age         17
Name: a, dtype: object
********** 获取第一行,第二列数据 **********
17
********** 获取前两行,前两列数据 **********
    name     sex
a   lucy  female
b  lilei    male
********** 获取第一、三行,第一、三列列数据 **********
        name  age
a       lucy   17
c  hanmeimei   17
******************** at ********************
********** 获取第一行、第一列数据 **********
lucy
******************** iat ********************
********** 获取第一行、第一列数据 **********
lucy
********** == **********

综上可以总结出它们的区别:

  • loc:只能通过行索引和列索引名称获取单行单列,或者多行多列数据;
  • iloc:只能通过行序号和列序号获取单行单列,或者多行多列数据;
  • at:只能通过行索引和列索引名称获取单行单列数据,不能获取多行多列数据;
  • iat:只能通过行序号和列序号获取单行单列数据,不能获取多行、多列数据;
  • ix:从pandas 0.20.0版开始,ix已被彻底移除;
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
pandas是一个强大的数据分析工具,在数据处理过程,我们经常需要对DataFrame进行查询操作。Pandas提供了多种查询方法,包括lociloc、at、iat和ix。以下是对这些方法的详细解释和区别。 1. locloc是通过行标签和列标签进行查询的方法。例如,可以使用df.loc[row_index, column_name]的方式来查询DataFrame的特定值或行列的子集。其row_index可以是单个索引、索引列表或布尔数组,column_name可以是单个列名或列名列表。loc方法返回的是一个新的DataFrame或Series对象,以便进行进一步的操作。 2. ilociloc是通过行索引和列索引进行查询的方法。它与loc的用法类似,但是不是使用标签,而是使用整数位置来定位数据。例如,可以使用df.iloc[row_index, column_index]的方式来查询DataFrame的特定值或行列的子集。同样地,iloc方法返回的也是一个新的DataFrame或Series对象。 3. at:at用于直接查询DataFrame的单个元素,它使用行标签和列标签来定位。例如,可以使用df.at[row_label, column_label]的方式来获取特定位置的值。与loc方法相比,at方法更快,并且只返回标量值。 4. iatiat用于通过整数位置来查询DataFrame的单个元素。可以使用df.iat[row_index, column_index]的方式来获取特定位置的值。iat方法与at方法的区别ilocloc区别相似。 5. ix:在旧版本的pandas,ix方法用于混合标签和整数位置的查询。它可以使用标签或整数位置来定位数据,但是由于存在一些歧义和性能问题,自从pandas 0.20版本后,被推荐使用lociloc方法来替代ix方法。 总的来说,loc和at是通过标签进行查询的方法,ilociat是通过整数位置进行查询的方法。同时,lociloc返回的是一个新的DataFrame或Series对象,而at和iat只返回标量值。在实际使用,根据需要选择不同的查询方法。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

码道功成

过程不易,恳请支持一下!

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

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

打赏作者

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

抵扣说明:

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

余额充值