将pandas数据帧转换为序列

2024-03-29 15:24:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我对熊猫有点陌生。我有一个pandas数据框,它是一行23列。

我想把这个转换成一个系列?我在想什么是最Python式的方法?

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

谢谢!


Tags: to数据方法pandassizewitharrayseries
3条回答

It's not smart enough to realize it's still a "vector" in math terms.

更确切地说,它足够聪明,可以识别维度上的差异。:-)

我认为您可以做的最简单的事情是使用iloc按位置选择该行,这将为您提供一个列作为新索引、值作为值的系列:

>>> 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(_)
<class 'pandas.core.series.Series'>

您可以使用以下两种方法之一通过切片数据帧来检索序列:

http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.iloc.htmlhttp://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

您可以将单行数据帧(仍会产生数据帧)转置,然后将结果squeeze成一个序列(与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

注意:要容纳@ian提出的点(即使不在操作问题中),请测试数据帧的大小。我假设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, :]

相关问题 更多 >