Converti Pandas Dataframe in Numpy Array

  1. Metodo to_numpy per convertire Pandas dataframe in array numpy
  2. Metodo Values() per convertire Pandas dataframe in numpy Array
  3. Metodo To_records() per convertire dataframe in un array di record numpy

Impareremo il metodo to_numpy() per convertire l’array pandas.Dataframe in numpy, introdotto da pandas v0.24.0 che sostituisce il metodo deprecato .values. Possiamo definire to_numpy sugli oggetti Index, Series e DataFrame.

Il metodo deprecato DataFrame.values() ha un comportamento incoerente; pertanto, non è consigliabile utilizzarlo in base alla documentazione dell’API di Pandas. Tuttavia, esamineremo un esempio di questo metodo se stai utilizzando una versione precedente di Pandas.

Introdurremo anche un altro approccio che utilizza il metodo DataFrame.to_records() per convertire il dato dataframe in un array di record numpy.

Metodo to_numpy per convertire Pandas dataframe in array numpy

pandas.Dataframe è una struttura dati tabulare 2d con righe e colonne. Questa struttura dati può essere convertita in un array numpy usando il metodo to_numpy:

# python 3.x
import pandas as pd
import numpy as np

df = pd.DataFrame(
                data=np.random.randint(
                    0, 10, (6,4)),
                columns=["a", "b", "c", "d"])

nmp=df.to_numpy()

print(nmp) 
print(type(nmp))

Produzione:

[[5 5 1 3]
 [1 6 6 0]
 [9 1 2 0]
 [9 3 5 3]
 [7 9 4 9]
 [8 1 8 9]]
<class 'numpy.ndarray'>

Il metodo Pandas DataFrame to_numpy() converte il DataFrame in un array numpy come mostrato sopra.

Metodo Values() per convertire Pandas dataframe in numpy Array

Potremmo anche usare il metodo Dataframe.values() come segue.

# python 3.x
import pandas as pd
import numpy as np
df = pd.DataFrame(
    data=np.random.randint(
        0, 10, (6,4)),
    columns=["a", "b", "c", "d"])
nmp=df.values
print(nmp) 
print(type(nmp))

Produzione:

[[8 8 5 0]
 [1 7 7 5]
 [0 2 4 2]
 [6 8 0 7]
 [6 4 5 1]
 [1 8 4 7]]
<class 'numpy.ndarray'>

Se vogliamo includere la colonna index nell’array numpy convertito, dobbiamo applicare reset_index() con dataframe.values.

# python 3.x
import pandas as pd
import numpy as np

df = pd.DataFrame(
                data=np.random.randint(
                    0, 10, (6,4)),
                columns=["a", "b", "c", "d"])

nmp=df.reset_index().values
print(nmp) 
print(type(nmp))

Produzione:

[[0 1 0 3 7]
 [1 8 2 5 1]
 [2 2 2 7 3]
 [3 3 4 3 7]
 [4 5 4 4 3]
 [5 2 9 7 6]]
<class 'numpy.ndarray'>

Metodo To_records() per convertire dataframe in un array di record numpy

Se hai bisogno di dtypes, to_records() è l’opzione migliore da usare. Per quanto riguarda le prestazioni, sia to_numpy() che to_records() sono quasi le stesse:

# python 3.x
import pandas as pd
import numpy as np
df = pd.DataFrame(
    data=np.random.randint(
        0, 10, (6,4)),
    columns=["a", "b", "c", "d"])
nmp=df.to_records()
print(nmp) 
print(type(nmp))

Produzione:

[(0, 0, 4, 6, 1) 
 (1, 3, 1, 7, 1) 
 (2, 9, 1, 6, 4) 
 (3, 1, 4, 6, 9)
 (4, 9, 1, 3, 9)
 (5, 2, 5, 7, 9)]
<class 'numpy.recarray'>

Articolo correlato - Pandas DataFrame

  • Crea Pandas Dataframe da una lista
  • Differenza tra Pandas apply, map e applymap