Cómo convertir Pandas DataFrame en un array de NumPy

Asad Riaz 30 enero 2023
  1. El método to_numpy para convertir el DataFrame en un array NumPy
  2. to_records() método para convertir el DataFrame en el array de registros NumPy
Cómo convertir Pandas DataFrame en un array de NumPy

Aprenderemos el método to_numpy() para convertir el array pandas.Dataframe en NumPy, introducido desde pandas v0.24.0 reemplazando el antiguo método .values. Podemos definir to_numpy en los objetos Index, Series y DataFrame.

El antiguo DataFrame.values tiene un comportamiento inconsistente, no se recomienda su uso según la documentación de la API de pandas. Sin embargo, veremos un ejemplo de este método en caso de que estés usando una versión más antigua.

Otro viejo método DataFrame.as_matrix() está obsoleto ahora, ¡no lo uses!

También introduciremos otra aproximación usando el método DataFrame.to_records() para convertir el DataFrame dado en un array de registros NumPy.

El método to_numpy para convertir el DataFrame en un array NumPy

pandas.Dataframe es una estructura de datos tabular 2d con filas y columnas. Esta estructura de datos puede ser convertida en un array NumPy usando el método 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))

Producción :

[[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'>

Lo mismo se puede hacer usando el método Dataframe.values de la siguiente manera:

# 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))

Producción :

[[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'>

Si queremos incluir index en el array NumPy necesitamos aplicar 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))

Producción :

[[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'>

to_records() método para convertir el DataFrame en el array de registros NumPy

Si necesitas los dtypes, to_records() es la mejor opción a usar. En cuanto al rendimiento, tanto to_numpy() como to_records() son casi iguales:

# 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))

Resultado:

[(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'>

Artículo relacionado - Pandas DataFrame