根据索引号间隙填​​充缺失的行,为什么有效? - pandas 系列

Fill missing rows based on index number gaps, why does it work? - pandas series

假设我有一个 pandas 系列,如:

s = pd.Series([1,2],index=[0,3])

0    1
3    2
dtype: int64

并且索引中03之间有一个空隙,所以我想要的是添加更多行来填补空隙以获得[0, 1, 2, 3]的索引。

因此所需的输出如下所示:

0    1.0
1    NaN
2    NaN
3    2.0
dtype: float64

我做到了:

print(s.reindex(range(s.index.min(),s.index.max()+1)))

成功了!

但是为什么呢?

我预期的结果是:

0    1.0
1    2.0
2    NaN
3    NaN
dtype: float64

但它没有,并且给出了预期的结果!

(你知道,我已经准备好提出一个关于如何做到这一点的问题,但在准备展示尝试时,我解决了它:D,所以问了一个问题为什么它有效:-),大声笑)

原因很简单,因为 reindex() 是如何实现的。

如果您查看文档中给出的示例,执行 reindex() 只会在指定范围内添加具有 NaN 值的缺失索引。它不应该更改可用条目的索引。

Intrinsic data alignment. 基本上,您的源数据与索引 0 和 3 对齐。当您使用重新索引时,您正在创建新的行 1 和 2 并重新使用 0 和 3。

看看如果你这样做会发生什么:

s.reindex([0,0,3,3])

输出:

0    1
0    1
3    2
3    2
dtype: int64

Pandas 自动使用索引对齐。

s.reindex([1,2,5,6])

输出:

1   NaN
2   NaN
5   NaN
6   NaN
dtype: float64