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. 附加
下面,小鱼开始对上述读取的数据集做一个简单的处理,以方便我们后续的使用。
指定新的列索引
原始数据集列索引中的字符串都是中文,为了方便,我们来将它改为英文,注意顺序的一致性哦~
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']
修改之后就变成下面这样啦~
选取指定的特征
原始数据集的特征也太多了,不便于我们后续的学习,下面,小鱼只挑选部分特征。
df = df[['code', 'price', 'change', 'dividend2020', 'roe2020',
'averageCash', 'cash2020', 'assetLiability2020', 'gross2020']]
现在,整个数据集就简单很多啦~
设置行索引
我们知道股票的代码是唯一的,像身份证 ID 一样,即使上市公司的名称发生改变,股票代码也永远不会改变。
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()