2017-05-01 243 views
2

重命名列我有以下代碼:通過循環

import pandas as pd 

stocks=['GOOG.O','FB.O'] 
def ratios(x): 
    df=x[2].loc[[1,7,8,10],:] 
    df=df.set_index(df.columns[0]) 
    df.index.names=['Fundam Data'] 
    df.rename(columns={1:'Company',3:'Sector'}, inplace=True) 
    del df[2] 
    return df 

def results(): 
    dataframe=pd.DataFrame() 
    for titulos in stocks:  
     ruta=pd.read_html('http://www.reuters.com/finance/stocks/financialHighlights?symbol='+str(titulos),flavor='html5lib') 
     x=ratios(ruta) 
     if dataframe.empty: 
      dataframe= x 
     else: 
      dataframe=pd.concat([dataframe,x],axis=1, join_axes=dataframe.index) 
    return dataframe  
print (results())  

電流輸出是:

                         Company Sector Company Sector 
Fundam Data 
P/E Ratio (TTM)            32.14  20.94   43.25  20.94 
Price to Sales (TTM)        7.01   5.62   15.71   5.62 
Price to Book (MRQ)         4.60   1.98    7.34   1.98 
Price to Cash Flow (TTM)   24.70  14.83   34.57  14.83 

我想通過相應的自動收報機來替代名稱「公司」。 所需的輸出將是:

                          GOOG.O Sector  FB.O Sector 
Fundam Data 
P/E Ratio (TTM)            32.14  20.94   43.25  20.94 
Price to Sales (TTM)        7.01   5.62   15.71   5.62 
Price to Book (MRQ)         4.60   1.98    7.34   1.98 
Price to Cash Flow (TTM)   24.70  14.83   34.57  14.83 
+0

我很困惑你在這裏要求什麼。您可以根據需要添加結果輸出表嗎? –

+0

@Max Power,我的道歉,編輯。 – ge00rge

回答

2

ratios(x)您手動df.rename(columns={1:'Company',3:'Sector'}, inplace=True)設置列名「公司」。但是,在結果中,您通過for titulos in stocks循環訪問每個特定的公司名稱。我的解決方案只是將從results()開始迭代的特定公司名稱傳遞給ratios(),因此可以在重命名語句中使用它。

這會打印出您想要的結果。

import pandas as pd 
import html5lib 

stocks=['GOOG.O','FB.O'] 
def ratios(x, company_name): 
    df=x[2].loc[[1,7,8,10],:] 
    df=df.set_index(df.columns[0]) 
    df.index.names=['Fundam Data'] 
    df.rename(columns={1:company_name,3:'Sector'}, inplace=True) 
    del df[2] 
    return df 

def results(): 
    dataframe=pd.DataFrame() 
    for titulos in stocks:  
     ruta=pd.read_html('http://www.reuters.com/finance/stocks/financialHighlights?symbol='+str(titulos),flavor='html5lib') 
     x=ratios(ruta, titulos) 
     if dataframe.empty: 
      dataframe= x 
     else: 
      dataframe=pd.concat([dataframe,x],axis=1)#, join_axes=dataframe.index]) 
    return dataframe  

print (results())  
+0

很好的解釋,謝謝Max – ge00rge