Pandas 簡介

Pandas 簡介 #

Pandas 是為資料分析所提供的套件,是一個分析表格式資料非常方便的套件。

安裝方式:

pip install pandas

資料結構 #

Pandas Series 是一維的資料,可以儲存任意資料型態 (整數、字串、浮點數、Python Object 等等),可以指定 index 標示對應數值 (也可以不指定)。

import numpy as np
import pandas as pd

s = pd.Series(np.random.randn(3), index=['a', 'b', 'c'])
print(s)

輸出

a    0.198479
b   -0.849073
c   -0.527904
dtype: float64

Dataframe 是二維的資料,每個 column 是一個 Series。可以從 dict of Series 建立:

d = {
    'A': pd.Series(np.random.randn(3), index=['a', 'b', 'c']),
    'B': pd.Series(np.random.randn(4), index=['a', 'b', 'c', 'd'])
}

df = pd.DataFrame(d)
print(df)

輸出

          A         B
a -1.013013  0.177245
b  0.503507 -0.338184
c -0.596889 -2.307592
d       NaN  1.449229

缺值會儲存為 np.nan。

因為 DataFrame 是二維的,所以也可以從二維的 list 建立:

data = [
    [1, 2, 3],
    [3, 4, 5]
]

df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)

輸出

   A  B  C
0  1  2  3
1  3  4  5

其中 index 為 01 是因為建立時未指定 (可以用參數 index 傳入 array-like object 建立)。

觀看資料 #

np.random.seed(1)
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)
print(df.head())
print(df.tail(1))

其中 df.head() 印出前五行的資料,df.tail(1) 印出最後一行的資料:

                   A         B         C         D
2013-01-01  1.624345 -0.611756 -0.528172 -1.072969
2013-01-02  0.865408 -2.301539  1.744812 -0.761207
2013-01-03  0.319039 -0.249370  1.462108 -2.060141
2013-01-04 -0.322417 -0.384054  1.133769 -1.099891
2013-01-05 -0.172428 -0.877858  0.042214  0.582815
2013-01-06 -1.100619  1.144724  0.901591  0.502494
                   A         B         C         D
2013-01-01  1.624345 -0.611756 -0.528172 -1.072969
2013-01-02  0.865408 -2.301539  1.744812 -0.761207
2013-01-03  0.319039 -0.249370  1.462108 -2.060141
2013-01-04 -0.322417 -0.384054  1.133769 -1.099891
2013-01-05 -0.172428 -0.877858  0.042214  0.582815
                   A         B         C         D
2013-01-06 -1.100619  1.144724  0.901591  0.502494

可以使用 df.valuesdf.to_numpy() 拿出 numpy ndarray 格式的資料:

print(df.values)
print(df.to_numpy())
[[ 1.62434536 -0.61175641 -0.52817175 -1.07296862]
 [ 0.86540763 -2.3015387   1.74481176 -0.7612069 ]
 [ 0.3190391  -0.24937038  1.46210794 -2.06014071]
 [-0.3224172  -0.38405435  1.13376944 -1.09989127]
 [-0.17242821 -0.87785842  0.04221375  0.58281521]
 [-1.10061918  1.14472371  0.90159072  0.50249434]]
[[ 1.62434536 -0.61175641 -0.52817175 -1.07296862]
 [ 0.86540763 -2.3015387   1.74481176 -0.7612069 ]
 [ 0.3190391  -0.24937038  1.46210794 -2.06014071]
 [-0.3224172  -0.38405435  1.13376944 -1.09989127]
 [-0.17242821 -0.87785842  0.04221375  0.58281521]
 [-1.10061918  1.14472371  0.90159072  0.50249434]]

可以使用 df.describe() 看統計資料:

print(df.describe())
              A         B         C         D
count  6.000000  6.000000  6.000000  6.000000
mean   0.202221 -0.546642  0.792720 -0.651483
std    0.958008  1.110777  0.870717  1.022764
min   -1.100619 -2.301539 -0.528172 -2.060141
25%   -0.284920 -0.811333  0.257058 -1.093161
50%    0.073305 -0.497905  1.017680 -0.917088
75%    0.728815 -0.283041  1.380023  0.186569
max    1.624345  1.144724  1.744812  0.582815

取得資料 #

可以直接用 column name 取得資料:

print(df.A)  # 跟 df['A'] 等價
print('---------------')
print(df[['B', 'C']])
2013-01-01    1.624345
2013-01-02    0.865408
2013-01-03    0.319039
2013-01-04   -0.322417
2013-01-05   -0.172428
2013-01-06   -1.100619
Freq: D, Name: A, dtype: float64
---------------
                   B         C
2013-01-01 -0.611756 -0.528172
2013-01-02 -2.301539  1.744812
2013-01-03 -0.249370  1.462108
2013-01-04 -0.384054  1.133769
2013-01-05 -0.877858  0.042214
2013-01-06  1.144724  0.901591

使用 .values.to_numpy() 取得 numpy ndarray 格式的資料:

print(df[['B', 'C']].to_numpy())  # 跟 df[['B', 'C']].values 等價
[[-0.61175641 -0.52817175]
 [-2.3015387   1.74481176]
 [-0.24937038  1.46210794]
 [-0.38405435  1.13376944]
 [-0.87785842  0.04221375]
 [ 1.14472371  0.90159072]]

可以使用運算式取得資料與更新資料 (把 column B 中大於零的數值設成 1):

df.loc[df['B'] > 0, 'B'] = 1
print(df['B'])
2013-01-01   -0.611756
2013-01-02   -2.301539
2013-01-03   -0.249370
2013-01-04   -0.384054
2013-01-05   -0.877858
2013-01-06    1.000000
Freq: D, Name: B, dtype: float64

參考資料:

官方 10 分鐘學會 Pandas

comments powered by Disqus