在追加数据帧时挣扎

时间:2017-04-25 07:20:32

标签: python pandas

我期待通过循环追加各种数据帧,从Web中提取一系列数据。函数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())

看起来它不会循环。

2 个答案:

答案 0 :(得分:1)

问题在于return循环中有for

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

答案 1 :(得分:0)

这不是代码的问题,问题是并非所有的代码都在HTML中以相同的方式构建,这就是为什么我的结果好坏参半。谢谢大家的帮助!