`
kavy
  • 浏览: 890599 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Pandas中loc,iloc,ix的使用

 
阅读更多

使用 iloc 从DataFrame中筛选数据

iloc 是基于“位置”的Dataframe的操作,即主要基于下标的操作

简单使用

Pandas中的 iloc 是用基于整数的下标来进行数据定位/选择
iloc 的语法是 data.iloc[<row selection>, <column selection>], iloc 在Pandas中是用来通过数字来选择数据中具体的某些行和列。你可以设想每一行都有一个对应的下标(0,1,2,...),通过 iloc 我们可以利用这些下标去选择相应的行数据。同理,对于行也一样,想象每一列也有对应的下标(0,1,2,...),通过这些下标也可以选择相应的列数据。

在iloc中一共有 2 个 “参数” -行选择器-列选择器,例如:

    # 使用DataFrame 和 iloc 进行单行/列的选择
    # 行选择:
    data.iloc[0] # 数据中的第一行
    data.iloc[1] # 数据中的第二行
    data.iloc[-1] # 数据中的最后一行
    
    # 列选择:
    data.iloc[:, 0] # 数据中的第一列
    data.iloc[:, 1] # 数据中的第二列
    data.iloc[:, -1] # 数据中的最后一列 

行列混合选择

iloc 同样可以进行和列的混合选择,例如:

    # 使用 iloc 进行行列混合选择
    data.iloc[0:5] # 数据中的第 1-5 行
    data.iloc[:, 0:2] # 选择数据中的前2列和所有行
    data.iloc[[0, 3, 6, 24], [0, 5, 6]] # 选择第 1,4,7,25行 和 第 1,6,7 列
    data.iloc[0:5, 5:8] # 选择第1-6行 和 6-9列

使用 iloc 注意以下两点:

  • 如果使用iloc只选择了单独的一行会返回 Series 类型,而如果选择了多行数据则会返回 DataFrame 类型,如果你只选择了一行,但如果想要返回 DataFrame 类型可以传入一个单值list,具体例子看图:

     
    image

     

  • 当你使用 [1:5] 这种语法对数据进行切片的时候,要注意只选择了 1,2,3,44 个下标,而 5 并没有被包括进去,即使用[x:y]选择了下标从 xy-1 的数据

实际工作中,其实很少用到 iloc ,除非你想选择第一行( data.iloc[0] ) 或者 最后一行( data.iloc[-1] )

使用 loc 从DataFrame中筛选数据

可以在以下2中情况下使用 ioc

  • 使用 基于标签(列头)的下标的 查找
  • 使用 boolean / 有条件的 查找

使用 loc 的语法和 iloc 一样:data.loc[<row selection>, <column selection>]

使用基于标签(列头)的下标数据选择

使用 loc 进行数据选择是基于下标的(如果有的话),可以使用 df.set_index() 来设置下标, loc 方法直接通过下标来选择行。
例如将"last_name"这一列设置为下标:

    data.set_index("last_name", inplace=True)

效果如图:


 
image

现在我们已经将下标设置为"last_name",这样我们就可以根据"last_name"选择不同的数据了,使用 data.loc[<label>]

同样的可以查找单个值或者多个值,例子如图:


 
image

注意,第一个样例代码返回的是 Series 类型,而第二个样例代码返回的是 DataFrame 类型,同样你也可以通过传递一个单值list来返回一个 DataFrame 类型的数据

当然也可以使用 loc 对列进行选择,同时可以选择对列使用 " : "进行切片选择,效果如图:

 
image

 

同时,你还可以使用 " : " 对下标进行切片选择,例如 data.loc['Bruch':'Julio'] 会选择从下标为'Bruch'到下标为'Julio' 的所有行,例如:

    # 选择下标值为'Andrade' 和 'Veness',并且从'city'到'email'的所有列
    data.loc[['Andrade', 'Veness'], ['city':'email']]
    # 选择和之前相同的行,但只选择'first_name', 'address' 和 'city'这3列
    data.loc['Andrade':'Veness', ['first_name', 'address', 'city']]

    # 将下标切换为'id'
    data.set_index('id', inplace=True) # 在原有数据源上修改
    # 选择下标('id')= 487 的行
    data.loc[487]

注意:最后一行代码:data.loc[487] 不等价于 data.iloc[487], 前者是选择 'id' = 487 的行,而后者是选择第488行,DataFrame的索引可以是数字顺序的,也可以是字符串或多值的。

使用Boolean / 逻辑判断选择数据

使用 boolean 数组进行条件选择是较为常用的手段,使用boolean下标或者逻辑表达式,你可以传递给 loc 一个值为 True/False 的Series或者数组来选择那些 Series或者数组中值为 True 的行。

较多情况下,语句 data["first_name" == 'Antonio'] 会返回一个值为 True/False 的 Series 类型数据,其中 "True" 代表这一行中的 "first_name" 值为 "Antonio",这些 boolean数组可以直接如图所示传递给 loc 方法:

 
image

 

和之前一样,可以传递给 loc 第2个"参数"用来选择某些列,可以是列举的列名,也可以是用 " : " 切片的连续列,如图:

 
image

 

同样要注意:如果只选择了单独的一列,返回的是 Series 类型,同样传递一个单值list可以返回 DataFrame 类型,如图:

 
image

 

通过以下代码可以很好的理解 loc 的使用:

    # 选择 first_name 为Antonio,并且从 'city' 到 'email'的所有列
    data.loc[data['first_name'] == 'Antonio', 'city':'email']
 
    # 选择那些 email的值中是以 "hotmail.com" 结尾的行,同时选择所有列
    data.loc[data['email'].str.endswith("hotmail.com")]   
 
    # 选择那些 "last_name" 等于某些值的行
    data.loc[data['first_name'].isin(['France', 'Tyisha', 'Eric'])]   
       
    # 选择 first_name = 'Antonio' 并且 email 是以 "gmail.com"结尾的行
    data.loc[data['email'].str.endswith("gmail.com") & (data['first_name'] == 'Antonio')] 
 
    # select rows with id column between 100 and 200, and just return 'postal' and 'web' columns
    # 选择那些 id 从100到200的行,并且只返回 'postal' 和 'web' 这两列
    data.loc[(data['id'] > 100) & (data['id'] <= 200), ['postal', 'web']] 
 
    # lambda函数产生的 True/False 同样可以使用到 loc 中
    # 选择那些公司名为4个单词的行
    data.loc[data['company_name'].apply(lambda x: len(x.split(' ')) == 4)] 
 
    # 为了代码更加清晰, 选择也可以在 .loc 之外进行
    # 在 .loc 之外单独生成一个变量
    idx = data['company_name'].apply(lambda x: len(x.split(' ')) == 4)
    # 只选择 idx 值为True的那些行,并且只选择'email', 'first_name', 'company'这3列
    data.loc[idx, ['email', 'first_name', 'company']]

顺便说一下Pandas中 map(), apply()applymap()的区别

  • map() 是 Series 中的函数,DataFrame 中是没有 map() 的,map() 将函数应用于Series中的每一个元素

  • apply()applymap() 是 DataFrame 中的函数,而在Series中是没有的。他们的区别在于: apply() 将函数作用于DataFrame中的 每一个行或者列,而 applymap() 会将函数作用于DataFrame中的 每一个元素

使用 loc 修改 DataFrame 中的数据

你可以像使用 loc 查询数据那样对数据进行修改,这个操作不会返回新的数据对象而是直接在原数据上进行修改。通过这个操作,你可以根据不同的情况对数据进行修改:

    # 修改 'id' > 2000 的数据中的 'first_name' 为 "John"
    data.loc[data['id'] > 2000, "first_name"] = "John"

使用 ix 进行选择

现在pandas官方已经不推荐使用 ix 进行选择了,并且将会在 0.20.1版本从Pandas中丢弃



作者:danielAck
链接:https://www.jianshu.com/p/d6a9845a0a34

分享到:
评论

相关推荐

    详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别)

    主要介绍了详解pandas DataFrame的查询方法(loc,iloc,at,iat,ix的用法和区别),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

    详谈Pandas中iloc和loc以及ix的区别

    Pandas库中有iloc和loc以及ix可以用来索引数据,抽取数据。但是方法一多也容易造成混淆。下面将一一来结合代码说清其中的区别。 1. iloc和loc的区别: iloc主要使用数字来索引数据,而不能使用字符型的标签来索引...

    详解pandas中iloc, loc和ix的区别和联系

    ### 详解 Pandas 中 iloc, loc 和 ix 的区别与联系 #### 一、引言 在使用 Pandas 进行数据分析时,我们经常会遇到数据筛选的问题,即如何有效地选择 DataFrame 中的部分数据。Pandas 提供了多种选择数据的方式,...

    pandas ix &iloc &loc的区别

    但是最近由于版本的问题,从之前的Python2.7改用Python3.6 了,在3.6中提供了loc和iloc两种索引方法,把ix这个方法给划分开来了,所以很有必要做个总结和对比。 loc——通过行标签索引行数据 iloc——通过行号...

    浅谈pandas中Dataframe的查询方法([], loc, iloc, at, iat, ix)

    在处理这些数据时,我们常常需要查询特定的行或列,pandas为此提供了多种查询方法,包括使用方括号、loc、iloc、at、iat和ix等。 首先,使用方括号对DataFrame进行切片是一种非常直观和简单的方法。这种方式有点...

    pandas通过loc生成新的列方法

    pandas中一个很便捷的使用方法通过loc、iloc、ix等索引方式,这里记录一下: df.loc[条件,新增列] = 赋初始值 如果新增列名为已有列名,则在原来的数据列上改变 import pandas as pd import numpy as np data = pd....

    pandas中ix的使用详细讲解

    由于ix的这种复杂性,推荐在新的代码中使用loc和iloc来避免潜在的问题。loc更适合于基于标签的选择,而iloc则适用于基于位置的选择。这样可以使代码更加清晰且易于理解。 在进行Pandas数据处理时,理解这些选择器的...

    Pandas统计分析基础:掌握DataFrame的常用操作.pptx

    Pandas库提供了多种方法来查看和访问DataFrame对象中的数据,例如head、tail、loc、iloc、ix等方法。 八、结语 Pandas库中的DataFrame对象是一个非常强大和灵活的数据结构,提供了多种方法来读取、写入、转换、...

    python pandas.DataFrame选取、修改数据最好用.loc,.iloc,.ix实现

    在Python的Pandas库中,DataFrame是一个非常重要的数据结构,用于处理二维表格数据。在处理DataFrame时,...在实际应用中,应尽量避免使用弃用的`.ix`,优先考虑使用`.loc`和`.iloc`,以保持代码的现代性和可维护性。

    pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]

    本文将详细介绍DataFrame中用于数据选取的六种方法:`df[]`、`df.loc[]`、`df.iloc[]`、`df.ix[]`、`df.at[]`和`df.iat[]`。 1. **行(列)选取:df[]** `df[]` 用于单一维度上的数据选取,即选取行或列。...

    Pandas——筛选数据(loc、iloc)

    本文将详细介绍如何使用Pandas中的几个关键函数来筛选DataFrame中的数据,包括`loc`、`iloc`以及`ix`。 1. **普通方法筛选** - `df['A']` 和 `df.A` 都用于选取DataFrame中名为'A'的列。它们是等价的,返回一个...

    pandas 中文手册

    3. **Indexing and Selecting Data**:如何选取、过滤和排序数据,如`.loc`、`.iloc`和`.ix`等方法的使用。 4. **Data Alignment**:Pandas自动对齐数据的能力,使得在数据操作时非常方便。 5. **Missing Data**:...

    二十四、pandas数据分析

    可以使用 loc、iloc、ix 等函数来选取数据。 数据集成是 pandas 中的重要功能,包括 concat、merge、join 等多种方式。可以使用 concat 函数来合并多个 DataFrame,使用 merge 函数来合并两个 DataFrame,使用 join...

    pandas DataFrame索引行列的实现

    索引行有三种方法,分别是 loc iloc ix import pandas as pd import numpy as np index = [a, b, c, d] data = np.random.randint(10, size=(4, 3)) df = pd.DataFrame(data, index=index) 0 1 2 a 9 7 1 b 0 0 7...

Global site tag (gtag.js) - Google Analytics