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 為 0
、1
是因為建立時未指定 (可以用參數 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.values
跟 df.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
參考資料: