Python DataFrame是如何产生这种结果的?

Python DataFrame是如何产生这种结果的?,python,pandas,Python,Pandas,步骤1:显示前10行: In [13]: data[:10] Out[13]: admit gre gpa rank 0 0 380 3.61 3 1 1 660 3.67 3 2 1 800 4.00 1 3 1 640 3.19 4 4 0 520 2.93 4 5 1 760 3.00 2 6 1 560 2.98 1 7

步骤1:显示前10行:

In [13]: data[:10]
Out[13]: 
   admit  gre   gpa  rank
0      0  380  3.61     3
1      1  660  3.67     3
2      1  800  4.00     1
3      1  640  3.19     4
4      0  520  2.93     4
5      1  760  3.00     2
6      1  560  2.98     1
7      0  400  3.08     2
8      1  540  3.39     3
9      0  700  3.92     2
步骤2:列出排名为1的所有行

 In [15]: data["rank"]==1
    Out[15]: 
    0      False
    1      False
    2       True
    3      False
    4      False
    5      False
    6       True
    7      False
    8      False
    9      False
    10     False
步骤3:生成秩=1的行列表

In [16]: data[data["rank"]==1]
Out[16]: 
     admit  gre   gpa  rank
2        1  800  4.00     1
6        1  560  2.98     1
11       0  440  3.22     1
12       1  760  4.00     1
14       1  700  4.00     1
19       1  540  3.81     1
25       1  800  3.66     1
26       1  620  3.61     1
29       0  520  3.29     1
我不明白第三步。为什么data[boolean]会生成秩=1的实际行

因为它就像一个面具。
检查此项

数据[布尔值]
其中
数据
是一个数据帧,
布尔值
是一些布尔值序列。这意味着:将
布尔值
索引与
数据
索引对齐,并选择
数据
值,其中对应的
布尔值
。如果
boolean
有索引,则必须一一匹配,如果没有,则必须具有相同的长度

例如,您可以使用向量
[True,False,…,False]

>>> data[[True] + [False] * 9]
    admit   gre     gpa     rank
0   0   380     3.61    3
如果
布尔值
的长度不相同,例如

>>> data[[True] + [False] * 10]
你得到一个

ValueError: Item wrong length 11 instead of 10.
如果
布尔值
的索引不匹配,则会出现
索引错误

>>> data[(data["rank"] == 1)[:9]]
IndexingError: Unalignable boolean Series provided as indexer
如果更改索引名

>>> (data["rank"] == 1).add_prefix('_')
_0    False
_1    False
_2     True
_3    False
_4    False
_5    False
_6     True
_7    False
_8    False
_9    False
Name: rank, dtype: bool
您还将得到一个错误:

>>> data[(data["rank"].add_prefix('_') == 1)]
IndexingError: Unalignable boolean Series provided as indexer
这被称为。还有基于、
data.loc[]
(可以是数字、字符串或日期)或绝对、
data.iloc[]
的索引,以及用于这两者的传统方法
data.ix[]