gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:39:16 25 4
gpt4 key购买 nike

只是对“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

所以基本上我很好奇为什么您会在“loc/iloc”上使用“where”以及为什么它返回 NaN 值?

最佳答案

loc 视为过滤器 - 只给我符合条件的 df 部分。

where 最初来自 numpy。它遍历一个数组并检查每个元素是否符合条件。因此它返回整个数组,结果为 NaNwhere 的一个很好的特性是你还可以返回一些不同的东西,例如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 中的标准选择方式,还有 ilocloc 使用行名和列名,而 iloc 使用它们的索引号。因此,对于 loc,您可以选择返回,例如,df.loc[0:1, ['Gender', 'Goals']]:

    Gender  Goals
0 m 12
1 m 23

关于Python Pandas - 'loc' 和 'where' 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54900717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com