上一部分介绍了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_x
、c_name_y
,为了方便使用,需要将列名修改为带有实际意义的词,下面介绍修改索引名、列名的函数DataFrame.rename
:
-
axis
参数值为'index'
时表示修改索引名,为'column'
时表示修改列名名,和mapper
参数同时生效 -
mapper
、index
、column
:传入一个字典,用于修改索引名或列名,字典的key是原名称,value是修改后的名称,或者传入一个函数,函数作用于每一个旧的的名称(mapper
情况下,行或列由axis
值决定),函数返回值为新的名称。 -
即
mapper
和axis
一起使用时,等价于单独用index
或column
参数
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
网友评论