DataFrame如何产生此结果?

时间:2018-09-22 17:27:16

标签: 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      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

我不理解第3步。为什么data [boolean]会产生rank == 1的实际行?

2 个答案:

答案 0 :(得分:1)

因为它充当了面具。 签出pandas reference

答案 1 :(得分:0)

data[boolean],其中data是一个数据帧,而boolean是一些布尔值序列,表示:将boolean的索引与data的索引对齐,然后选择{{1 }}值,其中相应的data值为boolean。如果True有一个索引,则它必须一对一匹配;如果没有,则它必须具有相同的长度。

例如,您可以使用向量boolean

来选择数据框中的第一个值
[True, False, ..., False]

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

boolean

您得到

>>> data[[True] + [False] * 10]

如果ValueError: Item wrong length 11 instead of 10. 的索引不匹配,您将得到boolean

IndexingError

如果您更改索引名称

>>> 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

这被称为boolean indexing。还有基于label>>> data[(data["rank"].add_prefix('_') == 1)] IndexingError: Unalignable boolean Series provided as indexer (可以是数字或类似字符串或类似日期)或绝对值positiondata.loc[]和旧方法{ {1}}用于这两个方面。