測試環境為 CentOS 8 (虛擬機)
參考資料 – https://blog.techbridge.cc/2020/09/21/python-pandas-zen-tutorial/
下面以 股票 CSV 格式為範例.
[root@localhost ~]# wget https://www.twse.com.tw/exchangeReport/STOCK_DAY_ALL?response=open_data -O tw_stock_20230221.csv
[root@localhost ~]# cat tw_stock_20230221.csv 證券代號,證券名稱,成交股數,成交金額,開盤價,最高價,最低價,收盤價,漲跌價差,成交筆數 "0050","元大台灣50","4772315","567003197","119.00","119.10","118.55","118.95","-0.0500","9128" "0051","元大中型100","19315","1086348","56.05","56.30","56.05","56.25","0.2000","134" "0052","富邦科技","251513","26328173","104.85","105.00","104.45","104.75","-0.1500","423" "0053","元大電子","8378","488691","58.60","58.60","58.25","58.60","-0.1000","958" "0055","元大MSCI金融","159738","3609835","22.70","22.70","22.54","22.55","-0.1900","279" "0056","元大高股息","29201103","803042808","27.41","27.55","27.36","27.53","0.1200","17948" "0057","富邦摩台","3882","335388","86.50","86.65","86.45","86.65","-0.2000","885"
安裝所需模組
[root@localhost ~]# pip install pandas
匯入模組
[root@localhost ~]# python3 Python 3.6.8 (default, Sep 10 2021, 09:13:53) [GCC 8.5.0 20210514 (Red Hat 8.5.0-3)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import pandas as pd
透過 DataFrame 物件將 csv 檔案轉換過來.
>>> df = pd.read_csv('tw_stock_20230221.csv') >>> df 證券代號 證券名稱 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 0 0050 元大台灣50 4772315.0 567003197.0 119.00 119.10 118.55 118.95 -0.05 9128.0 1 0051 元大中型100 19315.0 1086348.0 56.05 56.30 56.05 56.25 0.20 134.0 2 0052 富邦科技 251513.0 26328173.0 104.85 105.00 104.45 104.75 -0.15 423.0 3 0053 元大電子 8378.0 488691.0 58.60 58.60 58.25 58.60 -0.10 958.0 4 0055 元大MSCI金融 159738.0 3609835.0 22.70 22.70 22.54 22.55 -0.19 279.0 ... ... ... ... ... ... ... ... ... ... ... 1175 9944 新麗 74472.0 1526030.0 20.55 20.55 20.35 20.35 -0.20 98.0 1176 9945 潤泰新 2535015.0 112377835.0 44.40 44.45 44.20 44.40 0.00 1939.0 1177 9946 三發地產 77156.0 928860.0 12.00 12.10 11.95 12.05 0.05 74.0 1178 9955 佳龍 229733.0 4771269.0 20.95 20.95 20.65 20.80 -0.15 200.0 1179 9958 世紀鋼 3969464.0 423086085.0 108.00 108.50 104.50 105.50 -1.00 3143.0 [1180 rows x 10 columns]
檢視資料欄位與型別.
>>> df.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 1180 entries, 0 to 1179 Data columns (total 10 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 證券代號 1180 non-null object 1 證券名稱 1180 non-null object 2 成交股數 1169 non-null float64 3 成交金額 1169 non-null float64 4 開盤價 1167 non-null float64 5 最高價 1167 non-null float64 6 最低價 1167 non-null float64 7 收盤價 1167 non-null float64 8 漲跌價差 1180 non-null float64 9 成交筆數 1169 non-null float64 dtypes: float64(8), object(2) memory usage: 92.3+ KB
透過以下方式就可以針對不同欄位來搜尋.
>>> df.loc[df["證券名稱"] =="元大台灣50"] 證券代號 證券名稱 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 0 0050 元大台灣50 4772315.0 567003197.0 119.0 119.1 118.55 118.95 -0.05 9128.0
>>> df.loc[df["證券代號"] =="0050"] 證券代號 證券名稱 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 0 0050 元大台灣50 4772315.0 567003197.0 119.0 119.1 118.55 118.95 -0.05 9128.0
MultiIndex
通常我們會透過 證券代號 與 證券名稱 來當搜尋,所以可以將 Index 設定在該 columns.
>>> df.set_index(["證券代號" , "證券名稱"] , inplace=True) >>> df.index MultiIndex([( '0050', '元大台灣50'), ( '0051', '元大中型100'), ( '0052', '富邦科技'), ( '0053', '元大電子'), ( '0055', '元大MSCI金融'), ( '0056', '元大高股息'), ( '0057', '富邦摩台'), ( '0061', '元大寶滬深'), ('006203', '元大MSCI台灣'), ('006204', '永豐臺灣加權'), ... ( '9940', '信義'), ( '9941', '裕融'), ( '9941A', '裕融甲特'), ( '9942', '茂順'), ( '9943', '好樂迪'), ( '9944', '新麗'), ( '9945', '潤泰新'), ( '9946', '三發地產'), ( '9955', '佳龍'), ( '9958', '世紀鋼')], names=['證券代號', '證券名稱'], length=1180)
或是在載入時就先指定好.
>>> df = pd.read_csv('tw_stock_20230221.csv' , index_col=["證券代號" , "證券名稱"])
可透過以下方式來搜尋.
>>> df.loc['0050'] 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 證券名稱 元大台灣50 4772315.0 567003197.0 119.0 119.1 118.55 118.95 -0.05 9128.0
>>> df.xs('元大台灣50' , level=1 , drop_level=False) 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 證券代號 證券名稱 0050 元大台灣50 4772315.0 567003197.0 119.0 119.1 118.55 118.95 -0.05 9128.0
>>> df.xs('0050' , level=0 , drop_level=False) 成交股數 成交金額 開盤價 最高價 最低價 收盤價 漲跌價差 成交筆數 證券代號 證券名稱 0050 元大台灣50 4772315.0 567003197.0 119.0 119.1 118.55 118.95 -0.05 9128.0
匯出
匯出成 Json 格式,預設會轉成 Unicode 需使用參數 force_ascii=False
>>> df.to_json('stock.json' ,force_ascii=False ) >>> [2]+ Stopped python3
[root@localhost ~]# cat stock.json {"成交股數":{"('0050', '元大台灣50')":4772315.0,"('0051', '元大中型100')":19315.0,"('0052', '富邦科技')":251513.0,"('0053', '元大電子')":8378.0,"('0055', '元大MSCI金融 ')":159738.0,"('0056', '元大高股息')":29201103.0,"('0057', '富邦摩台')":3882.0,"('0061', '元大寶滬深')":85444.0,"('006203', '元大MSCI台灣')":5503.0,"('006204', '永豐臺 灣加權')":22770.0,"('006205', '富邦上証')":1223383.0,"('006206', '元大上證50')":87872.0,"('006207', 'FH滬深')":68802.0,"('006208', '富邦台50')":1884184.0,"('00625K', ' 富邦上証+R')":null,"('00631L', '元大台灣50正2')":2304134.0,"('00632R', '元大台灣50反1')":64450588.0,"('00633L', '富邦上証正2')":7644439.0,"('00634R', '富邦上証反1')":1 69000.0,"('00635U', '期元大S&P黃金')": ...
沒有解決問題,試試搜尋本站其他內容