Python Pandas - “loc”和“where”之间的区别?

2024-05-05

只是对“where”的行为以及为什么要使用它而不是“loc”感到好奇。

如果我创建一个数据框:

df = pd.DataFrame({'ID':[1,2,3,4,5,6,7,8,9,10], 
                   'Run Distance':[234,35,77,787,243,5435,775,123,355,123],
                   'Goals':[12,23,56,7,8,0,4,2,1,34],
                   'Gender':['m','m','m','f','f','m','f','m','f','m']})

然后应用“where”函数:

df2 = df.where(df['Goals']>10)

我得到以下结果,过滤掉目标 > 10 的结果,但将其他所有内容保留为 NaN:

  Gender  Goals    ID  Run Distance                                                                                                                                                  
0      m   12.0   1.0         234.0                                                                                                                                                  
1      m   23.0   2.0          35.0                                                                                                                                                  
2      m   56.0   3.0          77.0                                                                                                                                                  
3    NaN    NaN   NaN           NaN                                                                                                                                                  
4    NaN    NaN   NaN           NaN                                                                                                                                                  
5    NaN    NaN   NaN           NaN                                                                                                                                                  
6    NaN    NaN   NaN           NaN                                                                                                                                                  
7    NaN    NaN   NaN           NaN                                                                                                                                                  
8    NaN    NaN   NaN           NaN                                                                                                                                                  
9      m   34.0  10.0         123.0  

但是,如果我使用“loc”函数:

df2 = df.loc[df['Goals']>10]

它返回没有 NaN 值的子集数据帧:

  Gender  Goals  ID  Run Distance                                                                                                                                                    
0      m     12   1           234                                                                                                                                                    
1      m     23   2            35                                                                                                                                                    
2      m     56   3            77                                                                                                                                                    
9      m     34  10           123 

所以本质上我很好奇为什么你会使用“where”而不是“loc/iloc”以及为什么它返回 NaN 值?


考虑到loc作为过滤器 - 只给我 df 中符合条件的部分。

where最初来自 numpy。它运行一个数组并检查每个元素是否符合条件。所以它会返回整个数组,结果或NaN。一个不错的功能where是你还可以得到不同的东西,例如df2 = df.where(df['Goals']>10, other='0'),将不满足条件的值替换为0。

ID  Run Distance Goals Gender
0   1   234      12     m
1   2   35       23     m
2   3   77       56     m
3   0   0        0      0
4   0   0        0      0
5   0   0        0      0
6   0   0        0      0
7   0   0        0      0
8   0   0        0      0
9   10  123      34     m

另外,同时where仅用于条件过滤,loc是 Pandas 中选择的标准方式,以及iloc. loc使用行和列名称,而iloc使用它们的索引号。所以与loc你可以选择返回,比如说,df.loc[0:1, ['Gender', 'Goals']]:

    Gender  Goals
0   m   12
1   m   23
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Python Pandas - “loc”和“where”之间的区别? 的相关文章

随机推荐