iT邦幫忙

2025 iThome 鐵人賽

DAY 20
0
佛心分享-讓我升級的那些書

菜雞學習 pandas 的 30 日讀書分享系列 第 20 篇

菜雞學習 pandas 的 30 日讀書分享【Day 20】 算術與資料對齊

  • 分享至 

  • xImage
  •  

https://ithelp.ithome.com.tw/upload/images/20250819/201682905VmmZIwZ5t.jpg

算術與資料對齊

pandas 可以輕鬆使用具有不同索引的物件,將物件相加時,如果有兩個索引不相同,那摩產生的索引將是兩個索引的聯集:

In [182]: s1 = pd.Series([7.3, -2.5, 3.4, 1.5], index=["a", "c", "d", "e"])

In [183]: s2 = pd.Series([-2.1, 3.6, -1.5, 4, 3.1],
                         index=["a", "c", "e", "f", "g"])
In [184]: s1
Out[184]:
a    7.3
c   -2.5
d    3.4
e    1.5
dtype: float64

In [185]: s2
Out[185]:
a   -2.1
c    3.6
e   -1.5
f    4.0
g    3.1
dtype: float64

相加會產生:

In [186]: s1 + s2
Out[186]:
a    5.2
c    1.1
d    NaN
e    0.0
f    NaN
g    NaN
dtype: float64

內部的資料對齊會在不重疊的標籤位置加入缺失值,這些缺失值會在後續的算術計算中傳播出去。

pandas 會將 DataFrame 的列與欄兩者對齊:

In [187]: df1 = pd.DataFrame(np.arange(9.).reshape((3, 3)), columns=list("bcd"),
                             index=["Ohio", "Texas", "Colorado"])
                      
In [188]: df2 = pd.DataFrame(np.arange(12.).reshape((4, 3)), columns=list("bde"),
                             index=["Utah", "Ohio", "Texas", "Oregon"])
                             
In [189]: df1
Out[189]:
            b    c    d
Ohio      0.0  1.0  2.0
Texas     3.0  4.0  5.0
Colorado  6.0  7.0  8.0

In [190]: df2
Out[190]:
            b     d    e
Utah      0.0   1.0  2.0
Ohio      3.0   4.0  5.0
Texas     6.0   7.0  8.0
Oregon    9.0  10.0 11.0

將兩者相加會得到一個 DataFrame,裡面的索引和欄是各個 DataFrame 裡的索引和欄的聯集:

In [191]: df1 + df2
Out[191]:
            b   c    d   e
Colorado  NaN NaN  NaN NaN
Ohio      3.0 NaN  6.0 NaN
Oregon    NaN NaN  NaN NaN
Texas     9.0 NaN 12.0 NaN
Utah      NaN NaN  NaN NaN

因為 c 與 e 這兩個欄位沒有同時出現在兩個 DataFrame 物件中,所以在結果中會是缺失值,當橫列的標籤沒有同時出現在兩個物件中也是如此。

將欄與列標籤都不相同的 DataFrame 物件相加,結果會為 null:

In [192]: df1 = pd.DataFrame({"A": [1, 2]})

In [193]: df2 = pd.DataFrame({"B": [3, 4]})

In [194]: df1
Out[194]:
   A
0  1
1  2

In [195]: df2
Out[195]:
   B
0  3
1  4

In [196]: df1 + df2
Out[196]:
    A   B
0 NaN NaN
1 NaN NaN

今日的分享就到這囉,我們明天見,掰掰!


上一篇
菜雞學習 pandas 的 30 日讀書分享【Day 19】loc 與 iloc
下一篇
菜雞學習 pandas 的 30 日讀書分享【Day 21】特別值算術運算
系列文
菜雞學習 pandas 的 30 日讀書分享 共 30 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言