??上一部分介紹了pandas的基本概念,初步使用,以及一些簡單的畫圖工具怔锌,本節(jié)還是以A股數(shù)據(jù)為例程剥,繼續(xù)介紹pandas的用法。主要包括:
- 合并兩個(gè)表:pandas.merge
- 修改列名沐扳,索引名:DataFrame.rename
??首先還是通過tushare獲取所需的數(shù)據(jù)泥从,這次分別獲取A股的各只股票的所屬行業(yè)、概念沪摄、和地區(qū)躯嫉,分別得到3個(gè)DataFrame。
import tushare as ts
stock_industry = ts.get_industry_classified() # 所屬行業(yè)
stock_concept = ts.get_concept_classified() # 所屬概念
stock_area = ts.get_area_classified() #所屬地區(qū)
??可以分別查看數(shù)據(jù)的頭3行杨拐。
??為了方便查詢和使用祈餐,下面將如上3個(gè)DataFrame合并為一個(gè),需要用到的是pandas.merge
哄陶,如下是對(duì)merge函數(shù)中參數(shù)的詳細(xì)解釋帆阳。
-
left
,right
為需要合并的兩個(gè)DataFrame - 通過
on
參數(shù)指明按照哪一列進(jìn)行合并,如果這個(gè)列在兩個(gè)DataFrame中的列名不同屋吨,可以通過left_on
,right_on
分別進(jìn)行指定列名蜒谤。 -
how
參數(shù)指明了合并的方式,可選的方式有{'left', 'right', 'outer', 'inner'}离赫,用法類似于SQL中的連接芭逝, 默認(rèn)是'inner'
,即取兩個(gè)DataFrame按合并字段的交集渊胸。'outer'
即取并集旬盯,'left'
即依據(jù)左側(cè)DataFrame中的'on'
參數(shù)指定的字段來合并,'right'
則反之。
import pandas as pd
pd.merge(
left, # 待合并的左側(cè)DataFrame
right, # 待合并的右側(cè)DataFrame
# 此字段指明合并的方式胖翰,可選的方式有{'left', 'right', 'outer', 'inner'}
how='inner',
# 此字段指明1列或多列接剩,上面left、right按照此字段相同的行來進(jìn)行合并萨咳。
on=None,
left_on=None,
right_on=None,
left_index=False,
right_index=False,
# 將合并后的結(jié)果按照合并依據(jù)的字段排序懊缺,即on指定的字段。
sort=False,
# 如果上述left培他、right中的其他字段有重名的鹃两,按照這個(gè)后綴加以區(qū)分。
suffixes=('_x', '_y'),
# 默認(rèn)為False舀凛,即在不必要情況下不進(jìn)行原始數(shù)據(jù)的拷貝俊扳。
copy=True,
indicator=False,
# 檢查合并的方式,是1對(duì)多還是多對(duì)多
validate=None)
??然后對(duì)上面的行業(yè)猛遍、概念馋记、地區(qū)進(jìn)行兩兩合并,依據(jù)的是它們的code列懊烤。
# 首先將行業(yè)和概念進(jìn)行合并
tmp = pd.merge(
stock_industry,
stock_concept[['code','c_name']], # 選取原df的指定列來參與合并
on='code', # 合并依據(jù)列名
how='outer') # 取并集
tmp1 = pd.merge(
tmp,
stock_area[['code','area']],
on='code',
how='outer')
??合并之后的DataFrame分別如下:
??可以看到梯醒,合并后的DataFrame中,列名是c_name_x
腌紧、c_name_y
茸习,為了方便使用,需要將列名修改為帶有實(shí)際意義的詞寄啼,下面介紹修改索引名逮光、列名的函數(shù)DataFrame.rename
:
axis
參數(shù)值為'index'
時(shí)表示修改索引名,為'column'
時(shí)表示修改列名名墩划,和mapper
參數(shù)同時(shí)生效mapper
涕刚、index
、column
:傳入一個(gè)字典乙帮,用于修改索引名或列名杜漠,字典的key是原名稱,value是修改后的名稱察净,或者傳入一個(gè)函數(shù)驾茴,函數(shù)作用于每一個(gè)舊的的名稱(mapper
情況下,行或列由axis
值決定)氢卡,函數(shù)返回值為新的名稱锈至。即
mapper
和axis
一起使用時(shí),等價(jià)于單獨(dú)用index
或column
參數(shù)
DataFrame.rename(
mapper=None,
index=None,
columns=None,
axis=None,
copy=True, # 將潛在指向的數(shù)據(jù)也進(jìn)行了修改
inplace=False, # 修改是否在原DataFrame上生效
level=None # 在多重所以的情況下用于指定索引的級(jí)別
)
??在這里译秦,我們要將上面的列名進(jìn)行修改峡捡,只需要傳入{'c_name_x':'industry','c_name_y':'concept'}這個(gè)字典到column
參數(shù)即可击碗。
stocks = tmp1.rename(
columns={'c_name_x': 'industry','c_name_y': 'concept'}
)
stocks.to_csv('股票所屬行業(yè)_概念_地區(qū).csv') #保存數(shù)據(jù)到本地csv文件