Pandas 作為流行的數據分析處理庫,使用非常簡潔方便纸巷。
1. 讀取 csv 文件
Pandas 可以非常方便地讀取 csv 文件:
>> import pandas as pd
>> df = pd.read_csv('data.csv', encoding='gbk')
>> df.head()
讀取結果:
df.head
默認顯示前 5 行,可以指定參數來讀取前 n 行眶痰。30 clolumns
指出該數據集共有 30 個特征瘤旨。
2.查看數據集的基本信息
>> df.info()
輸出結果:
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 32 entries, 0 to 31
Data columns (total 30 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 股票代碼 32 non-null object
1 股票簡稱 32 non-null object
2 現價(元) 32 non-null float64
3 漲跌幅(%) 32 non-null float64
4 分紅比例(%)2020.12.31 32 non-null float64
5 分紅比例(%)2019.12.31 32 non-null float64
6 分紅比例(%)2018.12.31 32 non-null float64
7 分紅比例(%)2017.12.31 32 non-null float64
8 分紅比例(%)2016.12.31 32 non-null float64
9 加權凈資產收益率(%)2020.12.31 32 non-null float64
10 加權凈資產收益率(%)2019.12.31 32 non-null float64
11 加權凈資產收益率(%)2018.12.31 32 non-null float64
12 加權凈資產收益率(%)2017.12.31 32 non-null float64
13 加權凈資產收益率(%)2016.12.31 32 non-null float64
14 凈利潤現金含量占比平均(%)2016.12.31-2020.12.31 32 non-null float64
15 凈利潤現金含量占比(%)2019.12.31 32 non-null float64
16 凈利潤現金含量占比(%)2018.12.31 32 non-null float64
17 凈利潤現金含量占比(%)2017.12.31 32 non-null float64
18 凈利潤現金含量占比(%)2016.12.31 32 non-null float64
19 凈利潤現金含量占比(%)2020.12.31 32 non-null float64
20 資產負債率(%)2020.12.31 32 non-null float64
21 資產負債率(%)2019.12.31 32 non-null float64
22 資產負債率(%)2018.12.31 32 non-null float64
23 資產負債率(%)2017.12.31 32 non-null float64
24 資產負債率(%)2016.12.31 32 non-null float64
25 銷售毛利率(%)2020.12.31 32 non-null float64
26 銷售毛利率(%)2019.12.31 32 non-null float64
27 銷售毛利率(%)2018.12.31 32 non-null float64
28 銷售毛利率(%)2017.12.31 32 non-null float64
29 銷售毛利率(%)2016.12.31 32 non-null float64
dtypes: float64(28), object(2)
memory usage: 7.6+ KB
df.info
可以幫助我們清晰地了解讀取的數據集的基本情況,包括數據集索引的數量和范圍竖伯、特征的數量和具體特征以及每個特征列包含的非空記錄的個數存哲、數據類型等等。
注:
df.info()
的第一行信息也清晰地為我們揭示了讀取的 csv 文件在 pandas 內部的表示形式 -DataFrame
七婴。DataFrame
是 pandas 中最核心的數據結構祟偷,提供了非常多實用的 API 。
也可以使用 df.index
單獨查看索引的情況:
>> df.index
RangeIndex(start=0, stop=32, step=1)
使用 df.columns
查看列名(特征):
>> df.columns
Index(['股票代碼', '股票簡稱', '現價(元)', '漲跌幅(%)', '分紅比例(%)2020.12.31',
'分紅比例(%)2019.12.31', '分紅比例(%)2018.12.31', '分紅比例(%)2017.12.31',
'分紅比例(%)2016.12.31', '加權凈資產收益率(%)2020.12.31', '加權凈資產收益率(%)2019.12.31',
'加權凈資產收益率(%)2018.12.31', '加權凈資產收益率(%)2017.12.31',
'加權凈資產收益率(%)2016.12.31', '凈利潤現金含量占比平均(%)2016.12.31-2020.12.31',
'凈利潤現金含量占比(%)2019.12.31', '凈利潤現金含量占比(%)2018.12.31',
'凈利潤現金含量占比(%)2017.12.31', '凈利潤現金含量占比(%)2016.12.31',
'凈利潤現金含量占比(%)2020.12.31', '資產負債率(%)2020.12.31', '資產負債率(%)2019.12.31',
'資產負債率(%)2018.12.31', '資產負債率(%)2017.12.31', '資產負債率(%)2016.12.31',
'銷售毛利率(%)2020.12.31', '銷售毛利率(%)2019.12.31', '銷售毛利率(%)2018.12.31',
'銷售毛利率(%)2017.12.31', '銷售毛利率(%)2016.12.31'],
dtype='object')
使用 df.dtypes
查看數據類型:
>> df.dtypes
股票代碼 object
股票簡稱 object
現價(元) float64
漲跌幅(%) float64
分紅比例(%)2020.12.31 float64
分紅比例(%)2019.12.31 float64
分紅比例(%)2018.12.31 float64
分紅比例(%)2017.12.31 float64
分紅比例(%)2016.12.31 float64
加權凈資產收益率(%)2020.12.31 float64
加權凈資產收益率(%)2019.12.31 float64
加權凈資產收益率(%)2018.12.31 float64
加權凈資產收益率(%)2017.12.31 float64
加權凈資產收益率(%)2016.12.31 float64
凈利潤現金含量占比平均(%)2016.12.31-2020.12.31 float64
凈利潤現金含量占比(%)2019.12.31 float64
凈利潤現金含量占比(%)2018.12.31 float64
凈利潤現金含量占比(%)2017.12.31 float64
凈利潤現金含量占比(%)2016.12.31 float64
凈利潤現金含量占比(%)2020.12.31 float64
資產負債率(%)2020.12.31 float64
資產負債率(%)2019.12.31 float64
資產負債率(%)2018.12.31 float64
資產負債率(%)2017.12.31 float64
資產負債率(%)2016.12.31 float64
銷售毛利率(%)2020.12.31 float64
銷售毛利率(%)2019.12.31 float64
銷售毛利率(%)2018.12.31 float64
銷售毛利率(%)2017.12.31 float64
銷售毛利率(%)2016.12.31 float64
dtype: object
df.values
以 numpy.ndarray
的形式返回所有的數據:
>> df.values
array([['002690.SZ', '美亞光電', 42.24, -0.89, 123.42, 99.31, 105.65, 92.69,
65.56, 19.1, 23.61, 20.14, 17.38, 15.78, 101.92, 92.11, 94.54,
121.13, 107.02, 94.79, 19.7, 13.92, 14.84, 19.91, 12.83, 51.81,
55.45, 54.94, 53.21, 52.67],
['600507.SH', '方大特鋼', 9.35, -7.06, 110.81, 41.46, 84.09, 83.55,
50.19, 28.79, 27.05, 58.17, 67.67, 28.51, 140.16, 101.38, 122.07,
100.56, 202.07, 174.74, 31.15, 47.03, 29.96, 39.99, 65.46, 22.71,
24.68, 32.87, 32.03, 19.62],
['603866.SH', '桃李面包', 28.7, -0.1, 107.86, 96.24, 102.6, 73.35,
31.0, 21.98, 19.56, 19.71, 22.36, 22.42, 125.26, 129.92, 125.08,
127.25, 119.27, 124.75, 14.99, 27.82, 12.51, 10.51, 13.05, 29.97,
39.57, 39.68, 37.7, 36.13],
...,
['600690.SH', '海爾智家', 26.64, -2.45, 25.82, 28.83, 28.77, 30.11,
30.02, 17.67, 19.12, 21.0, 23.59, 20.41, 208.21, 183.79, 255.79,
241.82, 161.37, 198.26, 66.52, 65.33, 66.93, 69.13, 71.37, 29.68,
29.83, 29.0, 31.0, 31.02]], dtype=object)
3. 附加
下面打厘,小魚開始對上述讀取的數據集做一個簡單的處理修肠,以方便我們后續(xù)的使用。
指定新的列索引
原始數據集列索引中的字符串都是中文户盯,為了方便氛赐,我們來將它改為英文,注意順序的一致性哦~
df.columns = ['code', 'abbreviation', 'price', 'change',
'dividend2020', 'dividend2019', 'dividend2018', 'dividend2017', 'dividend2016',
'roe2020', 'roe2019', 'roe2018', 'roe2017', 'roe2016',
'averageCash', 'cash2019', 'cash2018', 'cash2017', 'cash2016', 'cash2020',
'assetLiability2020', 'assetLiability2019', 'assetLiability2018', 'assetLiability2017',
'assetLiability2016', 'gross2020', 'gross2019', 'gross2018', 'gross2017', 'gross2016']
修改之后就變成下面這樣啦~
選取指定的特征
原始數據集的特征也太多了先舷,不便于我們后續(xù)的學習,下面滓侍,小魚只挑選部分特征蒋川。
df = df[['code', 'price', 'change', 'dividend2020', 'roe2020',
'averageCash', 'cash2020', 'assetLiability2020', 'gross2020']]
現在,整個數據集就簡單很多啦~
設置行索引
我們知道股票的代碼是唯一的撩笆,像身份證 ID 一樣捺球,即使上市公司的名稱發(fā)生改變,股票代碼也永遠不會改變夕冲。
df = df.set_index('code')
因此氮兵,可以使用 code
列作為 DataFrame
的索引(行索引):
最后,我們將 df
保存成新的 csv 文件歹鱼,下次使用數據集的時候泣栈,直接讀取新的 csv 就好啦~
df.to_csv('simple_data.csv')
pd.read_csv('simple_data.csv', index_col='code').tail()