pandas金融数据分析教程-part2

  上一部分介绍了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)