??上一部分介紹了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,如下是對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對多還是多對多
validate=None)
??然后對上面的行業(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ì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文件
