1

我有一个大熊猫系列(5000 万+),我需要使用 32 位 Python 进行排序,但在排序过程中出现 MemoryError。看来熊猫的排序算法在排序过程中会生成几个临时数组。我知道我可以改用 numpy 的排序算法,但是我可以使用 pandas API 中具有较小内存占用的替代排序算法吗?

4

1 回答 1

1

2 种可能性

1)这本质上是 sort 所做的,但不使用临时变量(请注意,如果您在任何地方都有 NaN 这将不起作用)

In [1]: s = Series(np.random.rand(10))

In [3]: np.argsort(s.values)
Out[3]: array([8, 0, 1, 3, 9, 6, 2, 7, 5, 4])

In [4]: s[np.argsort(s.values)]
Out[4]: 
8    0.033948
0    0.183882
1    0.236021
3    0.372763
9    0.383721
6    0.489090
2    0.498036
7    0.676246
5    0.709906
4    0.738510
dtype: float64

2) 这还没有实现,但是你可以写入一个 HDFStore 表;有一个 readSorted 方法可以按排序顺序读回它。尝试方法1),如果这不起作用,那么我可以给你一个小脚本来做到这一点,我想

于 2013-04-19T14:31:59.313 回答