初识 - Pandas

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 内部的表示形式 - DataFrameDataFrame 是 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.valuesnumpy.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()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容