Convertir el dataframe pandas en serie

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

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

He intentado 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 la dimensionalidad. 🙂

Creo que lo más simple que puedes hacer es seleccionar esa fila en posición usando iloc , lo que te da 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(_)  

Puede transponer el dataframe de una sola fila (que aún resulta en un dataframe) y luego comprimir los resultados en una serie (la inversa 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 ajustar el punto señalado por @IanS (aunque no esté en la pregunta del OP), compruebe el tamaño del dataframe. Supongo que df es un dataframe, pero los casos de borde son un dataframe vacío, un dataframe de forma (1, 1) y un dataframe con más de una fila, en cuyo caso el uso debe implementar la 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 puede simplificarse 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, :] 

Puede recuperar la serie dividiendo su dataframe usando uno de estos dos métodos:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.html http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.loc.html

 import pandas as pd import numpy as np df = pd.DataFrame(data=np.random.randn(1,8)) series1=df.iloc[0,:] type(series1) pandas.core.series.Series 

De otra manera –

Supongamos que myResult es el dataFrame que contiene sus datos en forma de 1 col 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 varias columnas.