คุณสามารถเปลี่ยนดาต้าเฟรมแถวเดียว (ซึ่งยังคงให้ผลลัพธ์เป็นดาต้าเฟรม) จากนั้นบีบผลลัพธ์ให้เป็นอนุกรม (ผกผันของ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
หมายเหตุ:เพื่อรองรับจุดที่ @IanS ยกขึ้น (แม้ว่าจะไม่อยู่ในคำถามของ OP) ให้ทดสอบขนาดของดาต้าเฟรม ฉันสมมติว่าdf
เป็น dataframe แต่กรณี edge คือ dataframe ว่างดาต้าเฟรมของรูปร่าง (1, 1) และดาต้าเฟรมที่มีมากกว่าหนึ่งแถวซึ่งในกรณีนี้การใช้งานควรใช้ฟังก์ชันที่ต้องการ
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
นอกจากนี้ยังสามารถทำให้ง่ายขึ้นตามบรรทัดของคำตอบที่ @themachinist
if len(df) > 1:
pass
else:
result = pd.Series() if df.empty else df.iloc[0, :]
df.T