擅长:python、mysql、java
<p>第一行代码是使用布尔值<strong><code>Series</code></strong>进行选择,而第二行代码是使用布尔值<strong><code>DataFrame</code></strong>进行选择,处理方式非常不同,因为数据帧是二维的,有两个轴需要对齐。有一节专门说明<a href="https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#the-where-method-and-masking" rel="nofollow noreferrer">pandas docs</a>中的这种差异</p>
<p>在第一种情况下,使用布尔序列进行选择,只返回布尔序列中<code>True</code>行的所有列</p>
<p>在使用布尔数据框进行选择的情况下,返回与原始对象形状相同的对象,其中保留布尔数据框中的<code>True</code>值,并将任何<code>False</code>值替换为<code>NaN</code>。(它实际上被实现为<code>DataFrame.where</code>)对于没有出现在布尔数据帧掩码中的行和列,默认情况下它们变成<code>NaN</code></p>
<pre><code>import pandas as pd
df = pd.DataFrame({'a': [1, 2, np.NaN, 4],
'b': [10, 11, 12, 13]})
# Boolean Series, return all columns only for for rows where condition is True
df[df['a'] == 2]
# a b
#1 2.0 11
# Boolean DataFrame, equivalent to df.where(df[['a']] == 2)
df[df[['a']] == 2]
# a b
#0 NaN NaN
#1 2.0 NaN
#2 NaN NaN
#3 NaN NaN
</code></pre>