当您使用整数列表索引到pandas数据框时,它会返回列。
e.g。 df[[0, 1, 2]]
返回前三列。
为什么使用布尔向量进行索引会返回行列表?
e.g。 df[[True, False, True]]
返回第一行和第三行。 (如果没有3行,则会出错。)
为什么呢?它不应该返回第一列和第三列吗?
谢谢!
答案 0 :(得分:2)
因为如果使用:
class PersonCreate(CreateView):
model = Person
form_class = PersonForm
success_url = 'my_site/success.html'
def get_context_data(self, **kwargs):
# I have an error with the following line : 'NoneType' object has no attribute 'job_experiences'
job_experiences = self.object.job_experiences
#here is my code to get the formatted text
formatted_job_experiences = my_code(job_experiences)
context = super(PersonCreate, self).get_context_data(**kwargs)
context['formatted_job_experiences'] = formatted_job_experiences
return context
通过掩码称为boolean indexing
:
df[[True, False, True]]
样品:
[True, False, True]
布尔掩码与:
相同df = pd.DataFrame({'A':[1,2,3],
'B':[4,5,6],
'C':[7,8,9]})
print (df)
A B C
0 1 4 7
1 2 5 8
2 3 6 9
print (df[[True, False, True]])
A B C
0 1 4 7
2 3 6 9
答案 1 :(得分:1)
有特定切片访问器以特定方式定位行和列。
Mixed Position and Label Based Selection
loc[]
,at[]
和get_value()
获取行标签和列标签并返回相应的切片iloc[]
和iat[]
获取行和列位置并返回相应的切片您所看到的是pandas
试图推断您要做的事情的结果。正如您所注意到的那样,这有时是不一致的。事实上,它比你突出显示的更为明显......但我现在不会进入那个。
另见
However, when an axis is integer based, ONLY label based access and not positional access is supported. Thus, in such cases, it’s usually better to be explicit and use .iloc or .loc.