【发布时间】:2019-07-20 21:27:45
【问题描述】:
只是好奇 '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)
我得到以下过滤掉Goals> 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 值?
【问题讨论】:
-
相关:Pandas mask / where methods versus NumPy np.where。总结:Pandas
where很少能胜过(或可读性更强)更流行的 NumPynp.where,因此前者通常无关紧要。 -
谢谢jpp。您提出的有趣问题和“ead”的回答。我会看看 numpy 是否使用 'where'。