pandas.DataFrame.stack
非常慢。pandas.stack的平均成本是numpy.flatten
的6倍。怎么这么慢?有没有办法加快速度?
> df.shape # dtype = float64
(2578, 809)
> %timeit df.stack()
42 ms ± 130 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
> %timeit df.values.flatten()
7.35 ms ± 17.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
字符串
1条答案
按热度按时间gopyfrb31#
pd.stack
较慢,因为它不仅通过blockmanager在DataFrame中存储为np.ndarray
的数据块上操作,而且还需要处理索引。特别是stack
需要为生成的附加索引列创建一个多索引。pandas
专注于在数据操作方面提供极大的灵活性,而numpy
则提供了一个低级别的抽象,而不是高效的内存数据存储。pd.DataFrames
具有行和列标签,这需要在stack()
过程中进行额外的索引和标签操作。此外,所有标签和索引也需要额外的内存,内存访问需要额外的时间,特别是在处理大型数据集时。
pd.stack
的性能确实比np.flatten
差很多:字符串
的数据
分析代码:
型
如果您知道您不需要为您创建
pd.MultiIndex
的额外便利,那么就坚持使用numpy
实现。它在C或FORTRAN中有效地实现。