2017-04-25 36 views
-1

我期待通過從網絡中提取一系列數據的循環附加各種數據幀。函數ratios_funda由它自己的工作正確,但我沒有找到一種方法來根據不同的代價來循環它,並將它們一個接一個地追加在空dataframe。這是代碼。追加數據幀時掙扎

import pandas as pd 

cartera = ['FB.O', 'SAN.MC','TRE.MC', 'BBVA.MC'] 

def ratios_funda(x): 
    rat1=x[2].loc[[1,7,8,10],:] 
    rat2=x[3].loc[[1,5],:] 
    rat3=x[5].loc[[1,2,4,5],:] 
    rat5=x[7].loc[[5,6],:] 
    rat6=x[8].loc[[1,7],:] 

    rats=[rat1,rat2,rat3,rat5,rat6] 
    df=pd.concat([df.set_index(df.columns[0]) for df in rats]) 
    df.index.names=['Fundam ratios'] 
    df.rename(columns={1:'Company',2:'Industry',3:'Sector'}, inplace=True) 
    df.index = df.index.str.strip() 

    return df 

def resultados(): 
    dataframe=pd.DataFrame() 
    for titulos in cartera: 

     ruta=pd.read_html('http://www.reuters.com/finance/ 
     stocks/financialHighlights?symbol='+str(titulos),flavor='html5lib') 
     if dataframe.empty: 
      dataframe= ratios_funda(ruta) 
     else: 
      dataframe=pd.concat([dataframe, ratios_funda(ruta)],axis=1) 
    return dataframe 

print(resultados()) 

它看起來像不循環。

+0

它不起作用? – IanS

+0

我發現的問題是試圖用不同的'ruta'循環第一個函數,並在'dataframe'中將它們追加到另一個之後。順便說一句,感謝你的版本LanS – ge00rge

+0

代碼看起來很好乍一看。你有錯誤信息嗎? – IanS

回答

1

問題出在for循環中有return

def resultados(): 
    dataframe=pd.DataFrame() 
    for titulos in cartera: 
     ruta=pd.read_html('your url here') 
     if dataframe.empty: 
      dataframe= ratios_funda(ruta) 
     else: 
      dataframe=pd.concat([dataframe, ratios_funda(ruta)],axis=0) 
    return dataframe 
0

這不是代碼的問題,這個問題是不是所有的行情是結構性的HTML同樣的方式,這就是爲什麼我有不同的結果。謝謝大家的幫助!