Spec-Zone.ru › pandas 0.24

Разряженные структуры данных

Примечание

Класс 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API