Python Pandas – 檔案處理

Loading

測試環境為 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黃金')":
...
沒有解決問題,試試搜尋本站其他內容

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料