如何有效地连接 for 循环生成的数千个 pandas 数据帧?

Chr*_*xon 6 python append dataframe pandas

在读取不同文件的 for 循环中生成了数千个一致列的 dfs,我试图将它们合并/连接/附加到单个 df 中combined

combined = pd.DataFrame()

for i in range(1,1000): # demo only
    global combined
    generate_df() # df is created here
    combined = pd.concat([combined, df])
Run Code Online (Sandbox Code Playgroud)

最初速度很快,但随着combined增长速度减慢,最终变得慢得无法使用。这个关于如何追加行的答案解释了如何将行添加到字典然后创建 df 是最有效的,但我不知道如何使用to_dict.

对此有什么好方法吗?我是否以错误的方式处理这个问题?

Fra*_*asa 11

最快的方法是构建字典列表并在最后仅构建一次数据框:

rows = []

for i in range(1, 1000):
    # Instead of generating a dataframe, generate a dictionary
    dictionary = generate_dictionary()
    rows.append(dictionary)

combined = pd.DataFrame(rows)
Run Code Online (Sandbox Code Playgroud)

正如此处的基准测试所证明的那样,这比连接数据帧快大约 100 倍。


jez*_*ael 7

您可以创建 DataFrame 列表,然后concat仅使用一次:

dfs = []

for i in range(1,1000): # demo only
    global combined
    generate_df() # df is created here
    dfs.append(df)

combined = pd.concat(dfs)
Run Code Online (Sandbox Code Playgroud)