Pandas 的 read_csv() 函式是用來讀取本地的 csv 檔案後傳回一個 DataFrame 物件, 亦即傳入的第一參數為本機的 csv 檔檔名, 如果要分析的 csv 檔位於網路上, 通常要先用爬蟲程式將該 csv 檔下載至本機後再呼叫 pd.read_csv() 來轉成 DataFrame.
首先匯入要用到的類別與套件模組 :
>>> from io import StringIO
>>> import pandas as pd
>>> import requests
要下載的對象為政府資料開放平台上登錄編號為 11549 的證交所每日盤後資訊 :
按 "資料資源下載網址" 欄中的 "CSV" 按鈕就會從證交所的下列網址下載最近一個交易日盤後資訊的成交資料 :
可以用 requests 以 GET 方法下載此 CSV 檔 :
>>> url='https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data'
>>> res=requests.get(url)
一般作法會將擷取下來的 csv 檔內容 res.text 先用 open() 儲存到本機 :
>>> with open('twse_daily_trade.csv', 'w', newline='', encoding='utf-8') as f:
f.write(res.text)
103316
注意, 這裡傳入 newline='' 是要避免 \n\r 導致的空一列問題, 參考 :
然後再用 pd.read_csv() 讀取此 csv 檔轉成 DataFrame :
>>> df=pd.read_csv('twse_daily_trade.csv')
>>> df.iloc[0]
證券代號 0050
證券名稱 元大台灣50
成交股數 13980972.0
成交金額 2561360342.0
開盤價 183.0
最高價 183.65
最低價 182.35
收盤價 183.4
漲跌價差 4.05
成交筆數 17837.0
Name: 0, dtype: object
但若沒有保留 csv 檔的必要的話, 就不需要用 open() 去存檔, 可以用 io.StringIO 類別將 res.text 轉成 StringIO 物件後直接傳給 pd.read_csv(), 它可以讀取 StringIO 物件 :
>>> string_io=StringIO(res.text)
>>> type(string_io)
<class '_io.StringIO'>
>>> df=pd.read_csv(string_io)
>>> df.iloc[0]
證券代號 0050
證券名稱 元大台灣50
成交股數 13980972.0
成交金額 2561360342.0
開盤價 183.0
最高價 183.65
最低價 182.35
收盤價 183.4
漲跌價差 4.05
成交筆數 17837.0
Name: 0, dtype: object
下面是在 Colab 上執行的結果 :
沒有留言:
張貼留言