Pandas Python - Données clairsemées

Les objets épars sont «compressés» lorsqu'une donnée correspondant à une valeur spécifique (NaN / valeur manquante, bien que n'importe quelle valeur puisse être choisie) est omise. Un objet SparseIndex spécial suit où les données ont été «sparsifiées». Cela aura beaucoup plus de sens dans un exemple. Toutes les structures de données Pandas standard appliquent leto_sparse méthode -

import pandas as pd
import numpy as np

ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts

Ses output est comme suit -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64
BlockIndex
Block locations: array([0, 8], dtype=int32)
Block lengths: array([2, 2], dtype=int32)

Les objets rares existent pour des raisons d'efficacité de la mémoire.

Supposons maintenant que vous ayez un grand NA DataFrame et exécutez le code suivant -

import pandas as pd
import numpy as np

df = pd.DataFrame(np.random.randn(10000, 4))
df.ix[:9998] = np.nan
sdf = df.to_sparse()

print sdf.density

Ses output est comme suit -

0.0001

Tout objet épars peut être reconverti en forme dense standard en appelant to_dense -

import pandas as pd
import numpy as np
ts = pd.Series(np.random.randn(10))
ts[2:-2] = np.nan
sts = ts.to_sparse()
print sts.to_dense()

Ses output est comme suit -

0   -0.810497
1   -1.419954
2         NaN
3         NaN
4         NaN
5         NaN
6         NaN
7         NaN
8    0.439240
9   -1.095910
dtype: float64

Dtypes clairsemés

Les données éparses doivent avoir le même dtype que leur représentation dense. Actuellement,float64, int64 et booldtypessont pris en charge. Selon l'originaldtype, fill_value default changements -

  • float64 - np.nan

  • int64 - 0

  • bool - Faux

Exécutons le code suivant pour comprendre la même chose -

import pandas as pd
import numpy as np

s = pd.Series([1, np.nan, np.nan])
print s

s.to_sparse()
print s

Ses output est comme suit -

0   1.0
1   NaN
2   NaN
dtype: float64

0   1.0
1   NaN
2   NaN
dtype: float64