为什么pandas数据帧索引会根据索引类型更改轴?

时间:2016-10-12 08:00:54

标签: python pandas

当您使用整数列表索引到pandas数据框时,它会返回列。

e.g。 df[[0, 1, 2]]返回前三列。

为什么使用布尔向量进行索引会返回行列表?

e.g。 df[[True, False, True]]返回第一行和第三行。 (如果没有3行,则会出错。)

为什么呢?它不应该返回第一列和第三列吗?

谢谢!

2 个答案:

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

Select by position

Selection by Label

  • loc[]at[]get_value()获取行标签和列标签并返回相应的切片
  • iloc[]iat[]获取行和列位置并返回相应的切片

您所看到的是pandas试图推断您要做的事情的结果。正如您所注意到的那样,这有时是不一致的。事实上,它比你突出显示的更为明显......但我现在不会进入那个。

另见

pandas docs

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.