Puede transponer el marco de datos de una sola fila (que aún da como resultado un marco de datos) y luego comprimir 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()
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 extremos 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 la funcionalidad deseada.
if df.empty:
result = pd.Series()
elif df.shape == (1, 1)
result = pd.Series(df.iat[0, 0], index=df.columns)
elif len(df) == 1:
result = df.T.squeeze()
else:
pass
Esto también se puede simplificar según la respuesta proporcionada por @themachinist.
if len(df) > 1:
pass
else:
result = pd.Series() if df.empty else df.iloc[0, :]
df.T