【问题标题】:Pandas append is very slow, having problems using from_dictPandas 追加速度非常慢,使用 from_dict 时出现问题
【发布时间】:2021-09-06 09:37:57
【问题描述】:

我需要附加熊猫数据框。但我发现追加非常慢。此链接Improve Row Append Performance On Pandas DataFrames 建议使用 from_dict 而不是 append。我尝试做同样的事情,但我遇到了问题,将数据帧转换为_dict,然后从 dict 转换回数据帧。

我有这个数据框 df

        date   open   high    low  close  volume  average  barCount simb
0  3/31/2020  81.43  81.49  78.56  78.91  183417  80.0940     86742  xdt
1   4/1/2020  77.00  77.38  75.35  76.57   91420  76.4395     49399  xdt
2   4/2/2020  76.12  79.66  76.00  79.44   75298  78.4080     40614  xdt
3   4/3/2020  78.79  79.99  78.18  79.45   64965  79.0490     37140  xdt
4   4/6/2020  81.08  83.12  79.60  82.73   89395  81.3605     46247  xdt
5   4/7/2020  83.45  84.48  81.76  81.93   77722  83.3980     43947  xdt
6   4/8/2020  82.50  85.39  81.05  84.95   66202  83.4955     40256  xdt
7   4/9/2020  85.00  86.50  82.95  86.04   80298  85.1100     46184  xdt
8  4/13/2020  86.32  86.48  83.52  85.85   48114  85.1790     27280  xdt
9  4/14/2020  87.00  89.54  86.50  89.14   75528  88.4410     42810  xdt

我有数千个这样的数据帧。我需要将它们转换为 dict,然后将它们全部转换回数据框,如链接所示。

我的代码

d = {} 
i=0
d[i] =df.to_dict( 'index')
pd.DataFrame.from_dict(d, 'index')

我无法使用此代码获得正确的数据框。我使用了不同的选项而不是“索引”选项,但它没有帮助。如果有人可以帮助我编写代码,我将不胜感激

【问题讨论】:

  • 转换为字典然后返回数据框的原因是什么?似乎效率低下。
  • @Vishnudev 据我了解 concat 的性能也很慢
  • concat 与多个 dict 操作相比将是最快的。你可以试试基准测试。请不要将concat 放入循环中。
  • 您可以尝试的另一个选项 -> pd.DataFrame(np.vstack([i.values for i in df_list]), columns= df1.columns)。注意:我没有做过性能比较。
  • @BogdanTitomir 不,如果你逐渐增加pd.concat,它只会很慢。相反,将所有中间 df 附加到单个列表中,然后然后使用pd.concat(df_list)。可能没有比这更快的方法了

标签: python pandas dataframe


【解决方案1】:

将所有数据帧读入一个列表

from glob import glob

dfs = [pd.read_csv(file) for file in glob('*.csv')]

然后使用pd.concat

big_df = pd.concat(dfs)

注意:glob('*.csv') 会读取当前工作目录中的所有 csv 文件。

【讨论】:

  • 谢谢,如果我不读取 csv 文件怎么办。在每个循环中,我都会进行一些数据操作,然后得到我想要的数据帧。我需要阅读此数据框以列出,我该怎么做。
  • 你的 1000 个奇数数据帧是如何存储的?在变量中? @BogdanTitomir
  • 如果你觉得我的回答对你有帮助,你可以accept my answer。 @BogdanTitomir
猜你喜欢
  • 1970-01-01
  • 2021-12-04
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多