Разряженные структуры данных
Примечание
Класс SparsePanel был удален в версии 0.19.0
Мы реализовали «разряженные» версии Series и DataFrame. Они не разряженные в типичном понимании (в основном 0). Скорее, вы можете рассматривать эти объекты как «сжатые», где любая данные, соответствующие определённому значению (NaN / пропущенное значение, хотя может быть выбрано любое значение), опускаются. Специальный объект SparseIndex отслеживает, где данные были «разряжены». Это станет намного понятнее на примере. Все стандартные структуры данных pandas имеют метод to_sparse:
In [1]: ts = pd.Series(np.random.randn(10)) In [2]: ts[2:-2] = np.nan In [3]: sts = ts.to_sparse() In [4]: sts 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] BlockIndex Block locations: array([0, 8], dtype=int32) Block lengths: array([2, 2], dtype=int32)
Метод to_sparse принимает аргумент kind (для разряженного индекса, см. ниже) и fill_value. Итак, если у нас была в основном нулевая Series, мы могли бы преобразовать её в разряженную с помощью fill_value=0:
In [5]: ts.fillna(0).to_sparse(fill_value=0) Out[5]: 0 0.469112 1 -0.282863 2 0.000000 3 0.000000 4 0.000000 5 0.000000 6 0.000000 7 0.000000 8 -0.861849 9 -2.104569 dtype: Sparse[float64, 0] BlockIndex Block locations: array([0, 8], dtype=int32) Block lengths: array([2, 2], dtype=int32)
Разряженные объекты существуют по причинам эффективности памяти. Предположим, у вас был большой, в основном содержащий NA DataFrame:
In [6]: df = pd.DataFrame(np.random.randn(10000, 4))
In [7]: df.iloc[:9998] = np.nan
In [8]: sdf = df.to_sparse()
In [9]: sdf
Out[9]:
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
5 NaN NaN NaN NaN
6 NaN NaN NaN NaN
... ... ... ... ...
9993 NaN NaN NaN NaN
9994 NaN NaN NaN NaN
9995 NaN NaN NaN NaN
9996 NaN NaN NaN NaN
9997 NaN NaN NaN NaN
9998 0.509184 -0.774928 -1.369894 -0.382141
9999 0.280249 -1.648493 1.490865 -0.890819
[10000 rows x 4 columns]
In [10]: sdf.density
© 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.24.2/user_guide/sparse.html