Sie können die einreihige Datenrahmen umzusetzen (die in einem Datenrahmen ergibt sich immer noch) und dann drücken Sie die Ergebnisse in einer Reihe (die Inverse 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
Hinweis: Um den von @IanS angesprochenen Punkt zu berücksichtigen (auch wenn dies nicht in der Frage des OP steht), testen Sie die Größe des Datenrahmens. Ich df
gehe davon aus, dass dies ein Datenrahmen ist, aber die Randfälle sind ein leerer Datenrahmen, ein Datenrahmen mit Form (1, 1) und ein Datenrahmen mit mehr als einer Zeile. In diesem Fall sollte die Verwendung ihre gewünschte Funktionalität implementieren.
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
Dies kann auch im Sinne der Antwort von @themachinist vereinfacht werden.
if len(df) > 1:
# Dataframe with multiple rows. Implement desired behavior.
pass
else:
result = pd.Series() if df.empty else df.iloc[0, :]
df.T