繁体   English   中英

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

[英]Why reindex instead of using .loc?

在 pandas 的早期版本中,使用.loc[list-of-values]是可行的,只要值列表包含至少一个现有键即可。

但是,pandas 已将此功能换成重新索引 function。我个人喜欢.loc功能,因为它与索引切片和其他.loc行为配合得很好。 想知道他们为什么决定这样做吗?

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

有(至少)三种处理缺失标签的方式:

  1. 如果要求至少缺少一个 label,则会引发错误
  2. 如果仅请求缺少标签,则会引发错误
    • a)... 而如果至少有一个 label 存在,则缺少的标签变为 NaN (当前)
    • b)...而如果至少有一个 label 存在,缺失的标签将被悄悄丢弃
  3. 你永远不会因为缺少标签而报错
    • a)...然后他们变成了 NaN
    • b). ...然后它们被悄无声息地丢弃了

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

例如,选项 1 和 3。

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

pd.concat(chunks).loc[something]

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

归根结底,这是设计理念的问题,每种方法都有利有弊。

据我了解

如果你有下面的Series ,索引是 0-3,我们想得到超出索引的一些索引,我们应该reindex

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

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

s.loc[100]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM