Tengo el siguiente dataframe:
pa=pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])})
Quiero seleccionar la columna ‘a’ y luego solo un elemento en particular (es decir, primero: 1., 2., 3.)
¿Qué necesito agregar a:
pa.loc[:,['a']]
?
pa.loc[row]
selecciona la fila con la fila de la etiqueta.
pa.loc[row, col]
selecciona las celdas que son la sección de row
y col
pa.loc[:, col]
selecciona todas las filas y la columna llamada col
. Tenga en cuenta que aunque esto funciona, no es la forma idiomática de referirse a una columna de un dataframe. Para eso deberías usar pa['a']
Ahora tiene listas en las celdas de su columna, por lo que puede usar los métodos de cadena vectorizada para acceder a los elementos de esas listas como tal.
pa['a'].str[0] #first value in lists pa['a'].str[-1] #last value in lists
Almacenar listas como valores en un Pandas DataFrame tiende a ser un error porque le impide aprovechar las rápidas operaciones vectorizadas NumPy o Pandas.
Por lo tanto, es mejor que conviertas tu DataFrame de listas de números en un DataFrame más amplio con tipos de datos nativos de NumPy:
import numpy as np import pandas as pd pa = pd.DataFrame({'a':np.array([[1.,4.],[2.],[3.,4.,5.]])}) df = pd.DataFrame(pa['a'].values.tolist()) # 0 1 2 # 0 1.0 4.0 NaN # 1 2.0 NaN NaN # 2 3.0 4.0 5.0
Ahora, puedes seleccionar la primera columna como esta:
In [36]: df.iloc[:, 0] Out[36]: 0 1.0 1 2.0 2 3.0 Name: 0, dtype: float64
o la primera fila como esta:
In [37]: df.iloc[0, :] Out[37]: 0 1.0 1 4.0 2 NaN Name: 0, dtype: float64
Si desea eliminar los NaN, use .dropna()
:
In [38]: df.iloc[0, :].dropna() Out[38]: 0 1.0 1 4.0 Name: 0, dtype: float64
y .tolist()
para recuperar los valores como una lista:
In [39]: df.iloc[0, :].dropna().tolist() Out[39]: [1.0, 4.0]
pero si desea aprovechar NumPy / Pandas para la velocidad, querrá express sus cálculos como operaciones vectorizadas en df
sin tener que volver a las listas de Python.