tutorial index example python pandas dataframe series

python - index - Convierta el marco de datos de pandas a series



pandas series to list (4)

Soy algo nuevo para los pandas. Tengo un marco de datos de pandas que es de 1 fila por 23 columnas.

¿Quiero convertir esto en una serie? Me pregunto cuál es la forma más pitónica de hacer esto.

Intenté pd.Series(myResults) pero se queja de ValueError: cannot copy sequence with size 23 to array axis with dimension 1 . No es lo suficientemente inteligente como para darse cuenta de que sigue siendo un "vector" en términos matemáticos.

¡Gracias!


No es lo suficientemente inteligente como para darse cuenta de que sigue siendo un "vector" en términos matemáticos.

Digamos más bien que es lo suficientemente inteligente como para reconocer una diferencia en dimensionalidad. :-)

Creo que lo más simple que puede hacer es seleccionar esa fila posicionalmente usando iloc , que le brinda una Serie con las columnas como el nuevo índice y los valores como los valores:

>>> df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)]) >>> df a0 a1 a2 a3 a4 0 0 1 2 3 4 >>> df.iloc[0] a0 0 a1 1 a2 2 a3 3 a4 4 Name: 0, dtype: int64 >>> type(_) <class ''pandas.core.series.Series''>



Puede transponer el marco de datos de una sola fila (que todavía da como resultado un marco de datos) y luego squeeze los resultados en una serie (el inverso de to_frame ).

df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)]) >>> df.T.squeeze() # Or more simply, df.squeeze() for a single row dataframe. a0 0 a1 1 a2 2 a3 3 a4 4 Name: 0, dtype: int64

Nota: Para acomodar el punto planteado por @IanS (aunque no está en la pregunta del OP), pruebe el tamaño del marco de datos. Supongo que df es un marco de datos, pero los casos de borde son un marco de datos vacío, un marco de datos de forma (1, 1) y un marco de datos con más de una fila, en cuyo caso el uso debe implementar su funcionalidad deseada.

if df.empty: # Empty dataframe, so convert to empty Series. result = pd.Series() elif df.shape == (1, 1) # DataFrame with one value, so convert to series with appropriate index. result = pd.Series(df.iat[0, 0], index=df.columns) elif len(df) == 1: # Convert to series per OP''s question. result = df.T.squeeze() else: # Dataframe with multiple rows. Implement desired behavior. pass

Esto también se puede simplificar a lo largo de las líneas de la respuesta proporcionada por @themachinist.

if len(df) > 1: # Dataframe with multiple rows. Implement desired behavior. pass else: result = pd.Series() if df.empty else df.iloc[0, :]


De otra manera -

Suponga que myResult es el dataFrame que contiene sus datos en forma de 1 columna y 23 filas

// label your columns by passing a list of names myResult.columns = [''firstCol''] // fetch the column in this way, which will return you a series myResult = myResult[''firstCol''] print(type(myResult))

De manera similar, puede obtener series de Dataframe con múltiples columnas.