美文网首页
pandas金融数据分析教程-part2

pandas金融数据分析教程-part2

作者: DATA_KENGOU | 来源:发表于2018-09-10 18:07 被阅读0次

      上一部分介绍了pandas的基本概念,初步使用,以及一些简单的画图工具,本节还是以A股数据为例,继续介绍pandas的用法。主要包括:

    • 合并两个表:pandas.merge
    • 修改列名,索引名:DataFrame.rename

      首先还是通过tushare获取所需的数据,这次分别获取A股的各只股票的所属行业、概念、和地区,分别得到3个DataFrame。

    import tushare as ts
    stock_industry = ts.get_industry_classified() # 所属行业
    stock_concept = ts.get_concept_classified()  # 所属概念
    stock_area = ts.get_area_classified() #所属地区
    

      可以分别查看数据的头3行。


    行业_概念_地区.png

      为了方便查询和使用,下面将如上3个DataFrame合并为一个,需要用到的是pandas.merge,如下是对merge函数中参数的详细解释。

    • left, right为需要合并的两个DataFrame
    • 通过on参数指明按照哪一列进行合并,如果这个列在两个DataFrame中的列名不同,可以通过left_on, right_on分别进行指定列名。
    • how参数指明了合并的方式,可选的方式有{'left', 'right', 'outer', 'inner'},用法类似于SQL中的连接, 默认是'inner',即取两个DataFrame按合并字段的交集。'outer'即取并集,'left'即依据左侧DataFrame中的'on'参数指定的字段来合并,'right'则反之。
    import pandas as pd
    pd.merge(
        left,  # 待合并的左侧DataFrame
        right,  # 待合并的右侧DataFrame
        # 此字段指明合并的方式,可选的方式有{'left', 'right', 'outer', 'inner'}
        how='inner', 
        # 此字段指明1列或多列,上面left、right按照此字段相同的行来进行合并。
        on=None, 
        left_on=None, 
        right_on=None, 
        left_index=False, 
        right_index=False, 
        # 将合并后的结果按照合并依据的字段排序,即on指定的字段。
        sort=False, 
        # 如果上述left、right中的其他字段有重名的,按照这个后缀加以区分。
        suffixes=('_x', '_y'), 
        # 默认为False,即在不必要情况下不进行原始数据的拷贝。
        copy=True, 
        indicator=False, 
        # 检查合并的方式,是1对多还是多对多
        validate=None)
    

      然后对上面的行业、概念、地区进行两两合并,依据的是它们的code列。

    # 首先将行业和概念进行合并
    tmp = pd.merge(
        stock_industry, 
        stock_concept[['code','c_name']], # 选取原df的指定列来参与合并
        on='code',  # 合并依据列名
        how='outer') # 取并集
    tmp1 = pd.merge(
        tmp, 
        stock_area[['code','area']], 
        on='code', 
        how='outer')
    

      合并之后的DataFrame分别如下:


    行业_概念_地区_合并.png

      可以看到,合并后的DataFrame中,列名是c_name_xc_name_y,为了方便使用,需要将列名修改为带有实际意义的词,下面介绍修改索引名、列名的函数DataFrame.rename

    • axis参数值为'index'时表示修改索引名,为'column'时表示修改列名名,和mapper参数同时生效

    • mapperindexcolumn:传入一个字典,用于修改索引名或列名,字典的key是原名称,value是修改后的名称,或者传入一个函数,函数作用于每一个旧的的名称(mapper情况下,行或列由axis值决定),函数返回值为新的名称。

    • mapperaxis一起使用时,等价于单独用indexcolumn参数

    DataFrame.rename(
        mapper=None, 
        index=None, 
        columns=None, 
        axis=None,
        copy=True, # 将潜在指向的数据也进行了修改
        inplace=False, # 修改是否在原DataFrame上生效
        level=None # 在多重所以的情况下用于指定索引的级别
    )
    

      在这里,我们要将上面的列名进行修改,只需要传入{'c_name_x':'industry','c_name_y':'concept'}这个字典到column参数即可。

    stocks = tmp1.rename(
        columns={'c_name_x': 'industry','c_name_y': 'concept'}
    )
    stocks.to_csv('股票所属行业_概念_地区.csv') #保存数据到本地csv文件
    
    行业_概念_地区_合并1.png

    转载请注明文章来源

    相关文章

      网友评论

          本文标题:pandas金融数据分析教程-part2

          本文链接:https://www.haomeiwen.com/subject/pmwsgftx.html