Разреженные структуры данных
Примечание
SparseSeries и SparseDataFrame устарели. Их функциональность одинаково хорошо реализуется с помощью Series или DataFrame с разреженными значениями. См. Миграцию для советов по миграции.
Pandas предоставляет структуры данных для эффективного хранения разреженных данных. Они не обязательно разреженные в обычном понимании (в основном 0). Скорее, эти объекты можно рассматривать как «сжатые», где любые данные, соответствующие определенному значению (NaN / пропущенное значение, хотя можно выбрать любое значение, включая 0), опускаются. Сжатые значения фактически не хранятся в массиве.
In [1]: arr = np.random.randn(10) In [2]: arr[2:-2] = np.nan In [3]: ts = pd.Series(pd.SparseArray(arr)) In [4]: ts Out[4]: 0 0.469112 1 -0.282863 2 NaN 3 NaN 4 NaN 5 NaN 6 NaN 7 NaN 8 -0.861849 9 -2.104569 dtype: Sparse[float64, nan]
Обратите внимание на тип данных, Sparse[float64, nan]. nan означает, что элементы в массиве, которые nan , фактически не хранятся, хранятся только не-nan элементы. Эти не-nan элементы имеют тип данных float64.
Разреженные объекты существуют для повышения эффективности памяти. Представьте себе большой массив, в основном содержащий пропущенные значения DataFrame:
In [5]: df = pd.DataFrame(np.random.randn(10000, 4))
In [6]: df.iloc[:9998] = np.nan
In [7]: sdf = df.astype(pd.SparseDtype("float", np.nan))
In [8]: sdf.head()
Out[8]:
0 1 2 3
0 NaN NaN NaN NaN
1 NaN NaN NaN NaN
2 NaN NaN NaN NaN
3 NaN NaN NaN NaN
4 NaN NaN NaN NaN
In [9]: sdf.dtypes
© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.25.0/user_guide/sparse.html