子集选择是数据操作中最常执行的步骤之一。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 数据帧: 基于多个条件选择行基于某些特定条件选择行范围的方法很少。
所有这些方法产生的结果如下: 使用loc、iloc选择一系列行在本节中,介绍几种使用 loc 和 iloc 筛选数据帧的方法。 1.使用loc选择一系列行 df.loc[0:3] 输出: 2.使用iloc选择一系列行
输出: 为什么 df.loc [0:3] 返回4行,而 df.iloc[0:3] 仅返回3行? 如我们所见,使用 loc 和 iloc 的结果有所不同。造成这种差异的原因是:
你也可以参考下面的示例,获取更多参考。在下方的示例中,把 index 设置为“name”列,这样你就可以更清楚地理解它的用法和我的解释了。 df4 = df.copy()df4.set_index('name', inplace = True) 输出: 接下来让我们再次尝试上面的示例,看看loc如何处理索引标签。
输出: 根据条件选择必需列如果有几百列数据,而你可能只想选择其中的某些列,那么可以在loc语句中的条件之后添加列的列表中。 我们可以通过下面的示例来获取 age≥25 岁的人的“name”、“gender”和“address”。 df.loc[(df.age >=25), ['name','gender','address']] 输出: 同时选择行和列1.使用loc、iloc选择所有行和某些特定列
输出: 2.使用loc、iloc选择一系列特定的行和列 # 使用 ilocdf4.iloc[2:6,3:4]# 使用 locdf4.loc['Sam':'Dung',['favourite_fruit']] 输出: 3.使用loc、iloc选择不相交的行和列
输出: 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方法执行类似的任务。这两个操作产生相同的结果。
输出: 在数据帧中选择单个元素以下几种方法可以选择数据集中的单个元素,包括 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来筛选数据,这些技巧值得一学! |
|