Das Verwenden von spärren Strukturen in Pandas

PythonPythonBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab erfahren Sie, wie Sie spärliche Datenstrukturen in der pandas-Bibliothek verwenden. Dies ist in Szenarien nützlich, in denen wir große Datenmengen haben, von denen die meisten ähnlich sind (wie Null oder NaN) und daher in den Speicher effizienter dargestellt werden können. Wir werden uns mit dem SparseArray, SparseDtype, dem spärlichen Zugriff, der spärlichen Berechnung und der Interaktion mit scipy-spärlichen Matrizen befassen.

Tipps für die VM

Nachdem die VM gestartet ist, klicken Sie in der oberen linken Ecke, um zur Registerkarte Notebook zu wechseln und Jupyter Notebook für die Übung zu öffnen.

Manchmal müssen Sie einige Sekunden warten, bis Jupyter Notebook vollständig geladen ist. Die Validierung von Vorgängen kann aufgrund der Einschränkungen in Jupyter Notebook nicht automatisiert werden.

Wenn Sie bei der Lernphase Probleme haben, können Sie Labby gerne fragen. Geben Sie nach der Sitzung Feedback, und wir werden das Problem für Sie prompt beheben.

Erstellen eines SparseArray

Zunächst erstellen wir ein spärres Array, das eine pandas-Datenstruktur ist, um ein Array von spärren Werten effizient zu speichern. Spärre Werte sind solche, die nicht gespeichert werden, weil sie ähnlich den meisten Werten sind und daher als redundant angesehen werden.

## Importing necessary libraries
import pandas as pd
import numpy as np

## Creating a numpy array with random values
arr = np.random.randn(10)

## Setting some values to NaN
arr[2:-2] = np.nan

## Creating a sparse array with pandas
ts = pd.Series(pd.arrays.SparseArray(arr))

## Output the sparse array
print(ts)

Prüfung der Arbeitsspeichereffizienz

Als nächstes prüfen wir die Arbeitsspeichereffizienz der Verwendung von spärren Datenstrukturen. Wir werden einen großen DataFrame erstellen, ihn in spärrig umwandeln und dann den Arbeitsspeicherbedarf vergleichen.

## Creating a large DataFrame with random values
df = pd.DataFrame(np.random.randn(10000, 4))

## Setting majority of the DataFrame to NaN
df.iloc[:9998] = np.nan

## Converting the DataFrame to sparse
sdf = df.astype(pd.SparseDtype("float", np.nan))

## Checking memory usage of dense vs sparse DataFrame
print('dense : {:0.2f} bytes'.format(df.memory_usage().sum() / 1e3))
print('sparse: {:0.2f} bytes'.format(sdf.memory_usage().sum() / 1e3))

Das Verständnis von SparseDtype

Der SparseDtype speichert den Datentyp der nicht-spärren Werte und den skalaren Füllwert. Wir können ihn erstellen, indem wir nur einen Datentyp übergeben oder auch einen expliziten Füllwert.

## Creating a SparseDtype
print(pd.SparseDtype(np.dtype('datetime64[ns]')))

## Creating a SparseDtype with an explicit fill value
print(pd.SparseDtype(np.dtype('datetime64[ns]'), fill_value=pd.Timestamp('2017-01-01')))

Verwenden des spärren Zugriffsmethoden

Wir können den .sparse-Zugriff verwenden, um Attribute und Methoden für spärre Daten zu erhalten.

## Creating a Series with sparse values
s = pd.Series([0, 0, 1, 2], dtype="Sparse[int]")

## Using the sparse accessor
print(s.sparse.density)
print(s.sparse.fill_value)

Durchführen von spärren Berechnungen

Wir können NumPy ufuncs auf SparseArray anwenden und als Ergebnis ein SparseArray erhalten.

## Creating a SparseArray
arr = pd.arrays.SparseArray([1., np.nan, np.nan, -2., np.nan])

## Applying a NumPy ufunc
print(np.abs(arr))

Konvertieren zwischen spärrig und dicht

Wir können Daten leicht von spärrig in dicht umwandeln und umgekehrt.

## Converting from sparse to dense
print(sdf.sparse.to_dense())

## Converting from dense to sparse
dense = pd.DataFrame({"A": [1, 0, 0, 1]})
dtype = pd.SparseDtype(int, fill_value=0)
print(dense.astype(dtype))

Interaktion mit scipy sparse

Schließlich können wir einen DataFrame mit spärren Werten aus einer scipy spärren Matrix erstellen und umgekehrt.

## Importing necessary libraries
from scipy.sparse import csr_matrix

## Creating a sparse matrix with scipy
arr = np.random.random(size=(1000, 5))
arr[arr <.9] = 0
sp_arr = csr_matrix(arr)

## Creating a DataFrame from the sparse matrix
sdf = pd.DataFrame.sparse.from_spmatrix(sp_arr)

## Printing the DataFrame
print(sdf.head())
print(sdf.dtypes)

## Converting back to sparse matrix
print(sdf.sparse.to_coo())

Zusammenfassung

In diesem Lab haben wir gelernt, wie wir spärre Datenstrukturen in pandas für einen speicher- und recheneffizienten Umgang verwenden. Wir haben SparseArray, SparseDtype verwendet und spärre Berechnungen durchgeführt. Wir haben auch gelernt, wie man zwischen dicht und spärrig umwandelt und wie man mit scipy spärren Matrizen interagiert.