簡體   English   中英

Pandas DataFrame 列(系列)的索引與 Dataframe 不同?

[英]Pandas DataFrame column (Series) has different index than the Dataframe?

考慮這個小腳本:

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)

output 是:

   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 錯誤嗎?

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

您的索引不匹配。

當您執行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

使用此代碼獲得您期望的結果:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM