close
一、前言
檢視資料、處理遺失值常見方法(丟棄 向下向上填滿)、索引資料方法、插入一欄、刪除一欄、插入一列、index轉成時間格式、df改欄名,df排序、df物件轉數值、df畫圖、df改index名、df.join資料合併、pandas.concat用法、df快速畫圖、df高級快速畫圖、df快速統計運用
以上是剛開始分析時最容易遇到的問題,5分鐘看完此篇,少走1個月彎路!讓我們快速進入量化領域吧!
如果擁有基礎的人建議用ctrl+f直接找你要的關鍵處理方法!
二、常用語法大全
八成會遇到下面的問題,但也每次都要用的方法
程式碼詳解 持續更新唷!
import pandas, numpy
import pandas_datareader as web # 下載股價
import matplotlib.pyplot as plt # 繪圖
from matplotlib.gridspec import GridSpec # 畫板分割
# 下載股價資料當範例------------------------------------------------------
df = web.DataReader(name='2330.TW', data_source='yahoo', start='2020-01-01', end='2020-12-31') # name為股票代號名稱 start、end為資料下載期間
df2 = web.DataReader(name='2454.TW', data_source='yahoo', start='2020-01-01', end='2020-12-31')['Close'] # 只取收盤價
df2 = df2.to_frame('2454Close') # 數據型態並改名
# 檢視資料---------------------------------------------------------------
df.tail(3) # 查看後3筆
df.head(3) # 前3筆
'''
High Low Open Close Volume Adj Close
Date
2020-12-29 517.0 513.0 515.0 515.0 19907528.0 515.0
2020-12-30 525.0 514.0 516.0 525.0 46292401.0 525.0
2020-12-31 530.0 524.0 526.0 530.0 29970398.0 530.0
'''
# 處理遺失值nan-----------------------------------------------------------
df = df.dropna() # 有nan整列丟棄
df = df.dropna(0) # 用0取代
df = df.ffill() # 向下填滿nan
df = df.bfill() # 向上填滿nan
# 索引資料---------------------------------------------------------------
df['Close'] # 看Close欄
df.iloc[:, 1] # 看第row全部 第1欄 iloc用數字
df.loc['2020-12-31', 'Close'] # 看row 2021231 col Close loc填文字
# 欄名操作--------------------------------------------------------------
df.columns
df.columns = ['High', 'Low', 'Open', 'Close', 'Volume', 'Adj Close'] # 更改欄名
df.rename(columns={'High': '高'}) # 更改欄名方法2
# 插入一欄---------------------------------------------------------------
df['zero'] = 0 # 插入一欄裡面全都是0
df['SMA20'] = df['Close'].rolling(20).mean() # 直接df['新列名稱'] = 要插入的資料
# 刪除欄---------------------------------------------------------------
df.drop(columns=['zero', 'SMA20'], inplace=True)
# 插入一列---------------------------------------------------------------
df.loc['2021-01-01'] = 1
df.loc['2021-01-02'] = [0, 0, 0, 0, 0, 0] # 值不一樣時用[]
'''
High Low Open Close Volume Adj Close
Date
2021-01-01 5.0 5.0 5.0 5.0 5.0 5.0
2021-01-02 0.0 0.0 0.0 0.0 0.0 0.0
'''
# index 基本操作--------------------------------------------------------------
df.reset_index() # 重製index
df.sort_index(ascending=True) # True遞增 False遞減
# index轉成時間格式 時間序列--------------------------------------------------
df.index = pandas.to_datetime(df.index)
# 改變index名稱------------------------------------------------------------
df.index.name = 'Time'
'''
High Low Open Close Volume Adj Close
Time
2021-01-01 5.0 5.0 5.0 5.0 5.0 5.0
2021-01-02 0.0 0.0 0.0 0.0 0.0 0.0
'''
# 資料值轉成其他格式------------------------------------------------------
df = df.astype('float') # float:浮點數 int:整數 str:字串
# 快速畫圖---------------------------------------------------------------
df['Close'].plot() # 直接畫什麼參數都不加
df[['Close', 'Volume']].plot(secondary_y=['Close'], grid=True, figsize=(15, 5), title='Stock', style=['-', '--'])
'''
grid=True # 格線
secondary_y=['Close'] # 雙y軸
figsize=(15, 5) # (長, 寬)
title='Stock' # 標題
style=['-', '--'] # 線的樣式依序給 其他還有['-', '--', '.', '.-', '*-', '^-']
color='b' # 線的顏色
'''
# 高級快速繪圖----------------------------------------------------------
fig = plt.figure(figsize=(15, 5)) # 長寬
gs = GridSpec(2,1) # 規劃成 2列 1欄
ax = fig.add_subplot(gs[0,:]) # fig ax的東西畫在第0列第全欄
ax2 = fig.add_subplot(gs[1,:]) # fig ax2的東西畫在第1列第全欄
df['Close'].plot(grid=True, ax=ax, color='r') # Close放在ax
df['Volume'].plot(grid=True, ax=ax2) # Close放在ax2
# 基本統計應用--------------------------------------------------------------
df.describe() # 敘述統計
df.corr() # 相關係數矩陣
df.cov() # 變異數矩陣
df.sum() # 加總
# 基本運算--------------------------------------------------------------
sma20 = df['Close'].rolling(20).mean() # rolling >> 20天算一平均(滾動) 其他還有max(), min(), std()
ret = (df - df.shift(1)) / df.shift(1) # shift >> 過去1天的值
cumret = ret.cumsum() # cumsum >> 累計加總
# 資料合併------------------------------------------------------------------
df_all_join = df.join(df2) # 依照index合併沒有的給nan
df_all_concat = pandas.concat([df, df2]) # 依照columns合併沒有的給nan
三、後記
還有遇到其他常見問題可以留言告訴我唷!為你解答!
文章標籤
全站熱搜