【问题标题】:Pandas DataFrame column (Series) has different index than the Dataframe?Pandas DataFrame 列(系列)的索引与 Dataframe 不同?
【发布时间】:2021-11-22 07:35:15
【问题描述】:

考虑这个小脚本:

import pandas as pd

aa = pd.DataFrame({'a': [1,2,3]})
bb = aa.a
bb.index = bb.index + 1
aa['b'] = bb
print(aa)
print(aa.a - aa.b)

输出是:

   a    b
0  1  NaN
1  2  1.0
2  3  2.0

0    NaN
1    0.0
2    0.0
3    NaN

虽然我期待 aa.a - aa.b

0    NaN
1    1.0
2    1.0

这怎么可能?是 Pandas 的 bug 吗?

【问题讨论】:

  • 有趣的是,aa.indexaa.a.index 是不同的。看起来 pandas 通过替换引用的索引(在 bb.index = bb.index + 1 中)感到困惑。
  • 没错。这是预期的行为(我可以找到记录此内容的地方吗?)还是错误?

标签: python pandas dataframe indexing series


【解决方案1】:
aa = pd.DataFrame({'a': [1,2,3]})
bb = aa.a
bb.index = bb.index + 1
aa['b'] = bb
aa.reset_index(drop=True)  # add this

您的索引不匹配。

【讨论】:

  • 那么,每个 Dataframe 列都记住了自己的索引并且不假设 Dataframe 索引?这对我来说非常违反直觉
【解决方案2】:

当您执行 aa.b - aa.a 时,您将减去 2 个具有相同长度但索引不同的 pandas.Series

aa.a

1    1
2    2
3    3
Name: a, dtype: int64

在哪里:

aa.b

0    NaN
1    1.0
2    2.0
Name: b, dtype: float64

当你这样做时:

print(aa.b - aa.a)

您正在打印这 2 个 pandas.Series 的合并(无论操作类型:加法或减法),这就是索引 [0,1,2][1,2,3] 将合并到从 0 到 3 的新索引的原因:[ 0,1,2,3]。

例如,如果您将 bb.index 移到 2 而不是 1:

bb.index = bb.index + 2

到那时,您的新 pandas.Series 将有 5 行而不是 4 行。依此类推..

bb.index = bb.index + 2
aa['b'] = bb
print(aa.a - aa.b)

0    NaN
1    NaN
2    0.0
3    NaN
4    NaN
dtype: float64

【讨论】:

    猜你喜欢
    • 2016-02-17
    • 2014-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2020-03-10
    相关资源
    最近更新 更多