有时会返回一个数据帧而不是系列

时间:2015-08-24 07:22:38

标签: python pandas

我在一个类中有一个循环结构,它从另一个类中的数据帧中检索行。逐行检索行,这意味着它们作为系列返回。然后,我在Series上执行几个操作,然后使用更改更新原始数据帧行。

所有这些在99%的情况下都可以正常工作,但在非常罕见的情况下,而不是让系列返回给我,我得到了一个数据帧。这对我来说没有任何意义,因为没有重复,所以我应该每次都给我一个系列回复。这基本上就是我在做什么:

class XYZ:
    state_df = #create dataframe and populate it

    def __init__(self):
        pass

    def get_state(self, rowname):
        return self.state_df.loc[rowname].copy()

    def update_state(self, new_symbol_state):
        self.state_df.loc[new_symbol_state.name] = new_symbol_state

class ABC:
    def __init__(self):
        pass

    def process():
        xyz = MyClass.XYZ()
        state_series = xyz.get_state(rowname)
        # do stuff with the dataframe row which should be a series
        # ie: state_series. Then update the original dataframe row
        xyz.update_state(state_series)

就像我说的那样,99%的时间我收到一个系列回复给我,我对它执行了一些操作,然后我将它发送回原始数据帧,一切都很好。然而,我不时地得到一个数据帧而不是一个没有意义的系列。即使我打印出数据帧,它也表明它只有一行(即:没有重复),因此它应该是一个系列?

我需要一种方法来确保在致电state_series = xyz.get_state(rowname)时我总是会收到一个系列。有没有办法确保我总能收到一系列的回复?或者至少如果我得到一个只返回1行的数据帧,那么如何将其更改为系列。

1 个答案:

答案 0 :(得分:1)

如果rowname是列表,

df.loc[rowname]将返回DataFrame,而不是单个元素。示例 -

In [14]: df
Out[14]:
   A  B
0  1  3
1  2  4
2  3  5
3  4  5

In [15]: df.loc[0]
Out[15]:
A    1
B    3
Name: 0, dtype: int64

In [16]: type(df.loc[0])
Out[16]: pandas.core.series.Series

In [17]: df.loc[[0]]
Out[17]:
   A  B
0  1  3

In [18]: type(df.loc[[0]])
Out[18]: pandas.core.frame.DataFrame

因为,我们无法看到rowname来自哪里,我猜这可能是问题所在,您可以查看,为什么有时rowname将作为列表而不是单个值