填写预先分配的`pandas.DataFrame`

时间:2017-06-12 07:40:36

标签: python python-2.7 python-3.x pandas dataframe

我需要向pandas.DataFrame添加很多(1 440 000 000)行。

我事先知道行数,所以我可以预先分配它,然后用类似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

问题是,如何让我的代码更清洁?我的意思是:

  • 预分配DATA,而不使用sham列表
  • 对其进行充气
  • 在不使用索引的情况下将行附加到预分配DATA

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

0 个答案:

没有答案