对于下面的 df 表格,
A B C D
0 0 1 1 1
1 2 3 5 7
3 3 1 2 8
为什么在布尔索引后选择特定列需要使用双括号?
the [['A','C']] part of
df[df['A'] < 3][['A','C']]
colname
或colnames列表以选择列df[[colname(s)]]
,内部方括号用于列表,而外部方括号用于索引操作符,即如果要选择两个或多个列,则必须使用双重方括号。对于一个列名,单个括号返回一个Series,而双括号返回一个数据框。df.ix[df['A'] < 3,['A','C']]
或 df.loc[df['A'] < 3,['A','C']]
更好。由于您没有名为'A','C'
的列,这就是您尝试执行的操作,这将引发KeyError
,因此您必须使用可迭代对象从df中进行子选择。
所以
df[df['A'] < 3]['A','C']
引发
关键错误:('A','C')
这与
>>> df[df['A'] < 3][['A','C']]
A C
0 0 1
1 2 5
这与尝试没有区别:
df['A','C']
df[['A','C']]
.loc
:>>> df.loc[df['A'] < 3,['A','C']]
A C
0 0 1
1 2 5
这样你就可以在视图上操作,而不是潜在的副本
由于内部括号只是 Python 语法(文字)中的列表。
外部括号是 Pandas 数据帧对象的索引器操作。
在这种用例中,内部 ['A', 'B'] 定义了要作为单个参数传递给索引器操作的列列表,该操作由外部括号表示。
除了之前的回答,如果需要选择索引位置,你也可以使用df.iloc
访问器。这样做还可以使代码更具可重复性,这很好。