分享

Pandas数据帧筛选方法汇总,值得收藏

 喜欢站在山上 2024-01-11 发布于吉林

子集选择是数据操作中最常执行的步骤之一。Pandas提供了许多不同的方法来筛选数据帧,来获得选定的数据子集。在本文中,我们就要来处理数据时遇到的问题以及解决办法。

开始之前,我们先来创建一个示例数据帧。

#创建一个简单的数据帧df = pd.DataFrame({ 'name' : [ 'Chi', 'Alex', 'Sam', 'Hoang', 'Linh', 'Dung', 'Anh'], 'function' : [ 'Marketing', 'Tech', 'Tech', 'Finance', 'Finance', 'Marketing', 'HR'], 'address' : [ 'Hanoi', 'Saigon', 'Hanoi', 'Saigon', 'Hanoi', 'Hanoi', 'Saigon'], 'gender' : ['F', 'M', 'F', 'M', 'M', 'M', 'F'], 'favourite_fruit' : [ 'apple', 'banana', 'orange', 'watermelon', 'grape', np.NAN, 'kumquat'], 'age' : [20,25,21,26,30,31,23]})

以下是我们创建的 df 数据帧:

Pandas数据帧筛选方法汇总,值得收藏

基于多个条件选择行

基于某些特定条件选择行范围的方法很少。

#使用数据帧方法df[(df.age >=25) & (df.address == 'Hanoi')] #使用query函数df.query('age >= 25 & address == 'Hanoi'') #使用loc函数df.loc[(df.age >= 25) & (df.address == 'Hanoi')] 

所有这些方法产生的结果如下:

Pandas数据帧筛选方法汇总,值得收藏

使用loc、iloc选择一系列行

在本节中,介绍几种使用 loc 和 iloc 筛选数据帧的方法。

1.使用loc选择一系列行

df.loc[0:3]

输出:

Pandas数据帧筛选方法汇总,值得收藏

2.使用iloc选择一系列行

df.iloc[0:3]

输出:

Pandas数据帧筛选方法汇总,值得收藏

为什么 df.loc [0:3] 返回4行,而 df.iloc[0:3] 仅返回3行?

如我们所见,使用 loc 和 iloc 的结果有所不同。造成这种差异的原因是:

  • loc不返回基于索引位置的输出,而是基于索引的标签。
  • iloc根据索引中的位置选择行。这也意味着iloc只能处理整数。

你也可以参考下面的示例,获取更多参考。在下方的示例中,把 index 设置为“name”列,这样你就可以更清楚地理解它的用法和我的解释了。

df4 = df.copy()df4.set_index('name', inplace = True)

输出:

Pandas数据帧筛选方法汇总,值得收藏

接下来让我们再次尝试上面的示例,看看loc如何处理索引标签。

index = ['Chi', 'Sam', 'Hoang']df4.loc[index] 

输出:

Pandas数据帧筛选方法汇总,值得收藏

根据条件选择必需列

如果有几百列数据,而你可能只想选择其中的某些列,那么可以在loc语句中的条件之后添加列的列表中。

我们可以通过下面的示例来获取 age≥25 岁的人的“name”、“gender”和“address”。

df.loc[(df.age >=25), ['name','gender','address']]

输出:

Pandas数据帧筛选方法汇总,值得收藏

同时选择行和列

1.使用loc、iloc选择所有行和某些特定列

#使用 ilocdf4.iloc[:,[1,2,3]]#使用 loc和列名称df4.loc[:, ['address','gender','favourite_fruit']]

输出:

Pandas数据帧筛选方法汇总,值得收藏

2.使用loc、iloc选择一系列特定的行和列

# 使用 ilocdf4.iloc[2:6,3:4]# 使用 locdf4.loc['Sam':'Dung',['favourite_fruit']]

输出:

Pandas数据帧筛选方法汇总,值得收藏

3.使用loc、iloc选择不相交的行和列

#使用 ilocdf4.iloc[[1,3],[2,4]]#使用 locdf4.loc[['Alex','Hoang'],['gender','age']]

输出:

Pandas数据帧筛选方法汇总,值得收藏

4.使用 get.loc 和索引方法选择行和列

column_start = df4.columns.get_loc('address')column_end = df4.columns.get_loc('favourite_fruit')df4.iloc[1:4,column_start:column_end]

也可以使用.loc方法执行类似的任务。这两个操作产生相同的结果。

row_start = df4.index[1]row_end = df4.index[3]df4.loc[row_start:row_end, 'address':'gender']

输出:

Pandas数据帧筛选方法汇总,值得收藏

在数据帧中选择单个元素

以下几种方法可以选择数据集中的单个元素,包括 loc、iloc、iat 和 at 方法。

通过代码,我们来看看 df4 数据,看看 Hoang 最喜欢的水果是什么?

row_position = df4.index.get_loc('Hoang')column_position = df4.columns.get_loc('favourite_fruit')#使用 ilocdf4.iloc[row_position,column_position]#使用 iatdf4.iat[row_position,column_position]#使用 locdf4.loc['Hoang','favourite_fruit'] #使用 atdf4.at['Hoang','favourite_fruit']

基本上,上述4种方法检索都得到了相同的结果,即“watermelon(西瓜)”。但是,这些方法的运行速度略有不同,at 和 iat 方法比 loc 和 iloc 方法快一点。

Pandas数据帧筛选方法汇总,值得收藏

总结

以上为Pandas筛选数据帧时的一些常用技巧。如果你在学习Pandas,或者需要Pandas来筛选数据,这些技巧值得一学!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多