pandas 物件具備一組常用的數學和統計方法,他們大多是歸約或總結統計方法,可以從 Series 提取一個值(如 sum()
與 mean()
),或是從 DataFrame 的列或欄取出一個 Series。
與 NumPy 陣列的類似方法相比他們具備缺失資料的處理機制,考慮一個小型的 DataFrame:
In [267]: df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5],
.....: [np.nan, np.nan], [0.75, -1.3]],
.....: index=["a", "b", "c", "d"],
.....: columns=["one", "two"])
In [268]: df
Out[268]:
one two
a 1.40 NaN
b 7.10 -4.5
c NaN NaN
d 0.75 -1.3
呼叫 DataFrame 的 sum
方法會得到一個包含直欄總和的 Series:
In [269]: df.sum()
Out[269]:
one 9.25
two -5.80
dtype: float64
傳入 axis="columns"
或 axis=1
會改成跨欄加總:
In [270]: df.sum(axis="columns")
Out[270]:
a 1.40
b 2.60
c 0.00
d -0.55
dtype: float64
當整列或整欄都是 NA
值,總和或是 0
,如果有任何值不是 NA
,那麼結果將不是NA
。
可以使用 skipna
來停用此功能,此時在一列或一欄裡的任何 NA
值都會讓相應的結果變成 NA
:
In [271]: df.sum(axis="index", skipna=False)
Out[271]:
one NaN
two NaN
dtype: float64
In [272]: df.sum(axis="columns", skipna=False)
Out[272]:
a NaN
b 2.60
c NaN
d -0.55
dtype: float64
有些彙總統計至少需要一個非 NA
值才能產生值,如 mean
:
In [273]: df.sum(axis="columns")
Out[273]:
a 1.400
b 1.300
c NaN
d -0.275
dtype: float64
axis
:想歸約的軸,index
是 DataFrame 的列,columns
是欄。skipna
:排除缺失值,預設為 True
。level
:如果軸是分層檢索 (MuliIndex),那就依層分組歸約。
今日的分享就到這囉,我們明天見,掰掰!