pandas金融數(shù)據(jù)分析教程-part2

??上一部分介紹了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行。


行業(yè)_概念_地區(qū).png

??為了方便查詢和使用,下面將如上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分別如下:


行業(yè)_概念_地區(qū)_合并.png

??可以看到,合并后的DataFrame中,列名是c_name_x、c_name_y,為了方便使用,需要將列名修改為帶有實(shí)際意義的詞,下面介紹修改索引名、列名的函數(shù)DataFrame.rename

  • axis參數(shù)值為'index'時(shí)表示修改索引名,為'column'時(shí)表示修改列名名,和mapper參數(shù)同時(shí)生效

  • mapperindex、column:傳入一個(gè)字典,用于修改索引名或列名,字典的key是原名稱,value是修改后的名稱,或者傳入一個(gè)函數(shù),函數(shù)作用于每一個(gè)舊的的名稱(mapper情況下,行或列由axis值決定),函數(shù)返回值為新的名稱。

  • mapperaxis一起使用時(shí),等價(jià)于單獨(dú)用indexcolumn參數(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文件
行業(yè)_概念_地區(qū)_合并1.png

轉(zhuǎn)載請注明文章來源

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容