2017-05-01 4 views
2

Ich habe den folgenden Code:Spalten durch die Schleife umbenennen

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())  

Die aktuelle Ausgabe ist:

                         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 

Ich mag würde den Namen ‚Gesellschaft‘ durch den entsprechenden Ticker ersetzen. Die gewünschte Ausgabe wäre:

                          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

Ich bin verwirrt, was Sie hier verlangen. Könnten Sie eine Tabelle mit der Ergebnisausgabe hinzufügen, wie Sie es wollen? –

+0

@ Max Power, meine Entschuldigung, bearbeitet. – ge00rge

Antwort

2

In ratios(x) Sie manuell die Spaltennamen ‚Unternehmen‘ mit df.rename(columns={1:'Company',3:'Sector'}, inplace=True) gesetzt. Aber dann in den Ergebnissen durchlaufen Sie jeden spezifischen Firmennamen mit for titulos in stocks. Meine Lösung übergibt einfach den spezifischen Firmennamen, den Sie durchlaufen, von results() zu ratios(), so dass es in der Umbenennung verwendet werden kann.

Dies druckt Ihre gewünschten Ergebnisse.

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

Tolle Erklärung, danke Max – ge00rge

Verwandte Themen