Python 逐块构建数据帧的最快方法是什么?

Python 逐块构建数据帧的最快方法是什么?,python,performance,memory,pandas,dataframe,Python,Performance,Memory,Pandas,Dataframe,我正在从彭博社下载价格数据,并希望以最快、占用内存最少的方式构建数据帧。比如说,我通过python向彭博社提交了一份数据请求,以获取2000年1月1日至2013年1月1日期间所有标准普尔500指数股票的价格数据。数据由ticker返回,然后是日期和值,一次返回一个。我目前的方法是为要存储的日期创建一个列表,为要存储的价格创建另一个列表,并在从彭博数据请求响应中读取的每个列表中添加日期和价格。然后,当读取特定股票代码的所有日期和价格时,我使用 ticker_df = pd.DataFrame(pr

我正在从彭博社下载价格数据,并希望以最快、占用内存最少的方式构建数据帧。比如说,我通过python向彭博社提交了一份数据请求,以获取2000年1月1日至2013年1月1日期间所有标准普尔500指数股票的价格数据。数据由ticker返回,然后是日期和值,一次返回一个。我目前的方法是为要存储的日期创建一个列表,为要存储的价格创建另一个列表,并在从彭博数据请求响应中读取的每个列表中添加日期和价格。然后,当读取特定股票代码的所有日期和价格时,我使用

ticker_df = pd.DataFrame(price_list, index = dates_list, columns= [ticker], dtype=float)
我为每个股票代码执行此操作,在读取每个股票代码的数据后,将每个股票代码数据帧附加到列表>。当所有股票代码数据帧制作完成后,我将所有单独的数据帧组合成一个数据帧:

lg_index = []
for num in range(len(df_list)):
    if len(lg_index) < len(df_list[num].index):
        lg_index = df_list[num].index  # Use the largest index for creating the result_df
result_df = pd.DataFrame(index= lg_index)
for num in range(len(df_list)):
    result_df[df_list[num].columns[0]] = df_list[num]
lg_索引=[]
对于范围内的num(len(df_列表)):
如果len(lg_index)
我之所以这样做,是因为每个股票的指数都不相同(如果一只股票去年才首次公开发行,等等)


我猜一定有更好的方法来完成我在这里做的事情,用更少的内存,更快的方式,我就是想不出来。谢谢

我不能百分之百确定您要的是哪个,但您可以
concat
一个数据帧列表:

pd.concat(df_list)
例如:

In [11]: df = pd.DataFrame([[1, 2], [3, 4]])

In [12]: pd.concat([df, df, df])
Out[12]:
   0  1
0  1  2
1  3  4
0  1  2
1  3  4
0  1  2
1  3  4

In [13]: pd.concat([df, df, df], axis=1)
Out[13]:
   0  1  0  1  0  1
0  1  2  1  2  1  2
1  3  4  3  4  3  4
或执行外部合并/联接:

In [14]: df1 = pd.DataFrame([[1, 2]], columns=[0, 2])

In [15]: df.merge(df1, how='outer')  # do several of these
Out[15]:
   0  1   2
0  1  2   2
1  3  4 NaN