填充预分配的`pandas.DataFrame`

abu*_*kaj 5 python dataframe python-2.7 python-3.x pandas

我需要将大量 (1 440 000 000) 行附加到pandas.DataFrame.

我预先知道行数,因此我可以预先分配它,然后以类似于 C 的方式填充数据。

到目前为止,我最好的想法是相当丑陋的:

>>> N = 1000000
>>> sham = [-1] * (N * len(THRESHOLDS) * len(OBJECTS)) # 1440000000
>>> DATA = pd.DataFrame({'threshold': pd.Categorical(sham, categories=THRESHOLDS, ordered=True),
...                      'expected': pd.Series(sham, dtype=np.float16),
...                      'iteration': pd.Series(sham, dtype=np.int32),
...                      'analyser': pd.Categorical(sham, categories=ANALYSERS),
...                      'object': pd.Categorical(sham, categories=OBJECTS),
...                     },
...                     columns=['threshold', 'expected', 'iteration', 'analyser', 'object'])
>>> ptr = 0
>>> for t in THRESHOLDS:
...     for o in OBJECTS:
...         for a in ANALYSERS:
...             for i in range(N):
...                 DATA.iloc[ptr] = t, expectedMonteCarlo(o, a, t), i, a, o
...                 ptr += 1
Run Code Online (Sandbox Code Playgroud)

问题是,如何使我的代码更简洁?我特别指的是:

  • 预分配DATA而不用列表膨胀它sham
  • 将行追加到预分配DATA而不使用索引?

主要问题是内存效率。否则我会去将记录附加到list对象,然后将其转换为pandas.DataFrame.