pandas pivot_table:MemoryError

时间:2016-09-01 14:24:59

标签: python pandas

有什么方法可以在很多列(大约400)上进行pivot_table吗?无论如何,这个功能的限制是什么?

当我跑步时

pd.pivot_table(df, index=["ID"], values=["AMOUNT"],
               columns=["MCC_CODE"], aggfunc=[np.sum])

在少量数据上运行良好,但当我在所有数据上运行时,我会得到MemoryError

Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
  File "C:\Users\KL16166\...tools\pivot.py", line 83, in pivot_table
    margins=margins)
  File "C:\Users\KL16166\...tools\pivot.py", line 120, in pivot_table
    table = agged.unstack(to_unstack)
  File "C:\Users\KL16166\...core\frame.py", line 3859, in unstack
    return unstack(self, level)
  File "C:\Users\KL16166\...core\reshape.py", line 400, in unstack
    return _unstack_multiple(obj, level)
  File "C:\Users\KL16166\...core\reshape.py", line 294, in _unstack_multiple
    unstacked = dummy.unstack('__placeholder__')
  File "C:\Users\KL16166\...core\frame.py", line 3859, in unstack
    return unstack(self, level)
  File "C:\Users\KL16166\...core\reshape.py", line 404, in unstack
    return _unstack_frame(obj, level)
  File "C:\Users\KL16166\...core\reshape.py", line 445, in _unstack_frame
    return unstacker.get_result()
  File "C:\Users\KL16166\...core\reshape.py", line 147, in get_result
    values, value_mask = self.get_new_values()
  File "C:\Users\KL16166\...core\reshape.py", line 184, in get_new_values
    new_values = np.empty(result_shape, dtype=dtype)

MemoryError

数据看起来像这样:

     ID          MCC_CODE  AMOUNT
0    24880505     9402      1
1     7276993     6011      7
2    94238163     5198      1
3    45832413     5309      2
4     6170989     6011      9

我想要将数据集转换为如下所示:

             sum                                              ...
           AMOUNT                                             ...
MCC_CODE    4812 4816 5039 5072 5085 5122 5198 5200 5309 5411 ...  5691
ID                                                    ...
3968474      NaN  NaN  NaN  NaN    1  NaN  NaN  NaN  NaN  NaN ...   NaN
5803653      NaN  NaN  NaN  NaN  NaN    1  NaN  NaN  NaN  NaN ...   NaN
6170989      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...     1
7276993      NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
22691875     NaN  NaN  NaN  NaN  NaN  NaN  NaN    1  NaN  NaN ...   NaN
23470633     NaN  NaN  NaN  NaN  NaN  NaN  NaN    1  NaN  NaN ...   NaN
24880505     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
34676389     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
35444221     NaN  NaN  NaN    1  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
44226894     NaN    1  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
44926723     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
45832413     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN    2  NaN ...   NaN
46623281     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
48554278     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
52911146     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
69161440     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
80738635     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...     1
80966690     NaN  NaN    2  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
81479745     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN
83560007     NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN   22 ...   NaN
94238163     NaN  NaN  NaN  NaN  NaN  NaN    1  NaN  NaN  NaN ...   NaN
95633282       4  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN  NaN ...   NaN

有关数据集的信息:

>>> df.info() <class 'pandas.core.frame.DataFrame'> Int64Index: 3002680 entries, 0 to 3002679 Data columns (total 3 columns): NR_KLIENTA int64 MCC_KOD int64 POCET int64 dtypes: int64(3) memory usage: 91.6 MB

我想知道是否有任何解决方法。感谢

编辑: 现在我在stackoverflow上发现this question was already posted没有结果。在python中是否有任何替代方法可以使用可在大型数据集上使用的聚合进行数据透视?

编辑编辑: 好吧,我设法通过将32位版本的Python更改为64位版本来解决它。现在它完美无缺。

0 个答案:

没有答案