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.