¿Sabes cómo obtener el índice o la columna de un DataFrame como una matriz NumPy o una lista de Python?
¿Sabes cómo obtener el índice o la columna de un DataFrame como una matriz NumPy o una lista de Python?
Respuestas:
Para obtener una matriz NumPy, debe usar el values
atributo:
In [1]: df = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]}, index=['a', 'b', 'c']); df
A B
a 1 4
b 2 5
c 3 6
In [2]: df.index.values
Out[2]: array(['a', 'b', 'c'], dtype=object)
Esto accede a cómo los datos ya están almacenados, por lo que no hay necesidad de una conversión.
Nota: Este atributo también está disponible para muchos otros objetos de pandas.
In [3]: df['A'].values
Out[3]: Out[16]: array([1, 2, 3])
Para obtener el índice como una lista, llame a tolist
:
In [4]: df.index.tolist()
Out[4]: ['a', 'b', 'c']
Y de manera similar, para columnas.
.values
está en desuso, .to_numpy()
es el reemplazo sugerido si desea una matriz NumPy. ¿Puede expandirse en Esto accede a cómo los datos ya están almacenados, por lo que no hay necesidad de una conversión ?
Se puede utilizar df.index
para acceder al objeto de índice y luego obtener los valores de una lista usando df.index.tolist()
. Del mismo modo, puede usar df['col'].tolist()
para Series.
df.index.values.tolist()
df.index.tolist()
no devuelve un método de instancia. Devuelve una lista de índices. Es un método definido en el índice de pandas. Si bien llamar primero a los valores es una posibilidad, delegar el trabajo en numpy no es una corrección, solo una alternativa.
.values
a favor de estos métodos!De v0.24.0 en adelante, vamos a tener dos nuevos, los métodos preferidos de marca nalgadas para la obtención de las matrices de NumPy Index
, Series
y DataFrame
objetos: son to_numpy()
, y .array
. Con respecto al uso, los documentos mencionan:
No hemos eliminado o desaprobado
Series.values
oDataFrame.values
, pero recomendamos y utilizamos.array
o en su.to_numpy()
lugar.
Consulte esta sección de las notas de la versión v0.24.0 para obtener más información.
df.index.to_numpy()
# array(['a', 'b'], dtype=object)
df['A'].to_numpy()
# array([1, 4])
Por defecto, se devuelve una vista. Cualquier modificación realizada afectará al original.
v = df.index.to_numpy()
v[0] = -1
df
A B
-1 1 2
b 4 5
Si necesita una copia, use to_numpy(copy=True
);
v = df.index.to_numpy(copy=True)
v[-1] = -123
df
A B
a 1 2
b 4 5
Tenga en cuenta que esta función también funciona para DataFrames (mientras .array
que no).
array
Atributo
Este atributo devuelve unExtensionArray
objeto que respalda el Índice / Serie.
pd.__version__
# '0.24.0rc1'
# Setup.
df = pd.DataFrame([[1, 2], [4, 5]], columns=['A', 'B'], index=['a', 'b'])
df
A B
a 1 2
b 4 5
df.index.array
# <PandasArray>
# ['a', 'b']
# Length: 2, dtype: object
df['A'].array
# <PandasArray>
# [1, 4]
# Length: 2, dtype: int64
Desde aquí, es posible obtener una lista usando list
:
list(df.index.array)
# ['a', 'b']
list(df['A'].array)
# [1, 4]
o, simplemente llame directamente .tolist()
:
df.index.tolist()
# ['a', 'b']
df['A'].tolist()
# [1, 4]
Con respecto a lo que se devuelve, los documentos mencionan:
For
Series
yIndex
es respaldado por matrices NumPy normales,Series.array
devolverá un nuevoarrays.PandasArray
, que es un envoltorio delgado (sin copia) alrededor de anumpy.ndarray
.arrays.PandasArray
no es especialmente útil por sí solo, pero proporciona la misma interfaz que cualquier conjunto de extensiones definido en pandas o por una biblioteca de terceros.
Entonces, para resumir, .array
devolverá
ExtensionArray
respaldo existente del Índice / Serie, oExtensionArray
se crea un nuevo objeto como una envoltura delgada sobre la matriz subyacente.Justificación para agregar DOS métodos nuevos
Estas funciones se agregaron como resultado de discusiones bajo dos temas de GitHub GH19954 y GH23623 .
Específicamente, los documentos mencionan la justificación:
[...]
.values
no estaba claro si el valor devuelto sería la matriz real, alguna transformación de la misma o una de las matrices personalizadas de pandas (comoCategorical
). Por ejemplo, conPeriodIndex
,.values
genera un nuevondarray
período de objetos cada vez. [...]
Estas dos funciones apuntan a mejorar la consistencia de la API, que es un paso importante en la dirección correcta.
Por último, .values
no quedará en desuso en la versión actual, pero espero que esto pueda suceder en algún momento en el futuro, por lo que instaría a los usuarios a migrar hacia la API más nueva, tan pronto como sea posible.
Desde pandas v0.13 también puedes usar get_values
:
df.index.get_values()
get_values
solo llama .values
. Son más caracteres para escribir.
Convertí los pandas dataframe
a list
y luego se usa el básico list.index()
. Algo como esto:
dd = list(zone[0]) #Where zone[0] is some specific column of the table
idx = dd.index(filename[i])
Tienes tu valor de índice como idx
.
Una forma más reciente de hacer esto es usar la función .to_numpy ().
Si tengo un marco de datos con una columna 'precio', puedo convertirlo de la siguiente manera:
priceArray = df['price'].to_numpy()
También puede pasar el tipo de datos, como flotante u objeto, como argumento de la función
A continuación se muestra una forma sencilla de convertir la columna del marco de datos en una matriz numpy.
df = pd.DataFrame(somedict)
ytrain = df['label']
ytrain_numpy = np.array([x for x in ytrain['label']])
ytrain_numpy es una matriz numpy.
Intenté con, to.numpy()
pero me dio el siguiente error:
TypeError: no hay conversión compatible para los tipos: (dtype ('O'),) mientras hacía la clasificación de relevancia binaria usando SVC lineal. to.numpy () estaba convirtiendo el dataFrame en una matriz numpy, pero el tipo de datos del elemento interno estaba en la lista debido a que se observó el error anterior.
to_numpy
embargo, eso no es realmente la culpa .