将熊猫数据框转换为系列

新手上路,请多包涵

我对熊猫有点陌生。我有一个 1 行 23 列的熊猫数据框。

我想把它变成一个系列?我想知道最 pythonic 的方法是什么?

我试过 pd.Series(myResults) 但它抱怨 ValueError: cannot copy sequence with size 23 to array axis with dimension 1 。它不够聪明,无法意识到它仍然是数学术语中的“矢量”。

谢谢!

原文由 user1357015 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 260
2 个回答

如果你有一个单列数据框 df,你可以将它转换为一个系列:

 df.iloc[:,0]  # pandas Series

因为你有一个单行数据 df ,你可以转置它所以你在前一种情况下:

 df.T.iloc[:,0]

原文由 nicolass 发布,翻译遵循 CC BY-SA 4.0 许可协议

您可以转置单行数据帧(仍然会产生数据帧),然后将结果 压缩 成一个系列( to_frame 的逆)。

 df = pd.DataFrame([list(range(5))], columns=["a{}".format(i) for i in range(5)])

>>> df.squeeze(axis=0)
a0    0
a1    1
a2    2
a3    3
a4    4
Name: 0, dtype: int64

注意: 为了适应@IanS 提出的观点(即使它不在 OP 的问题中),请测试数据框的大小。我假设 df 是一个数据框,但边缘情况是一个空数据框,一个形状为 (1, 1) 的数据框,以及一个有多行的数据框,在这种情况下,使用应该实现它们所需的功能。

 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

这也可以按照@themachinist 提供的答案进行简化。

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

原文由 Alexander 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题