为什么要重新索引而不使用.loc?

时间:2020-06-10 00:37:20

标签: python pandas

在以前的熊猫版本中,只要值列表中至少包含一个现有键,则可以使用.loc[list-of-values]

但是,pandas换出了此功能,以支持reindex功能。我个人喜欢.loc功能,因为它可以很好地处理索引切片和其他.loc行为。想知道为什么他们决定这样做吗?

2 个答案:

答案 0 :(得分:1)

此更改似乎将在the github上进行详细讨论。

(至少)有三种方式来缺少标签:

  1. 如果要求至少丢失一个标签,则会引发错误
  2. 如果仅要求缺少标签,则会引发错误
    • a)...如果存在至少一个标签,则丢失的标签变为NaN (当前)
    • b)...如果至少存在一个标签,则丢失的标签会被静默丢弃
  3. 您永远不会因缺少标签而引发错误
    • a)...他们变成NaN
    • b)。 ...而他们被默默地抛弃了

似乎普遍同意,选项2的混合行为在很大程度上没有记载,有些违反直觉。这是一个可能令人困惑的行为的示例,其中重新排序操作会更改是否引发错误:

例如,带有选项1.和3.。

pd.concat([chunk.loc[something] for chunk in chunks])

pd.concat(chunks).loc[something]

都返回相同的结果(或加注)。取而代之的是2.它实际上取决于丢失的标签如何跨块分布。

最终,这是设计哲学的问题,每种方法都各有利弊。

答案 1 :(得分:0)

根据我的理解

如果下面有Series,并且索引为0-3,并且我们希望获得除索引之外的一些索引,我们应该reindex

s=pd.Series([1,2,3,4])
s.reindex([100])
100   NaN
dtype: float64

如果使用loc,它将返回错误

s.loc[100]