我需要向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
。