python - 有时会返回一个数据框而不是一个系列

标签 python pandas

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

所有这些在 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) 时始终获得返回给我的 Series。有没有办法确保我总能收到系列作品?或者至少如果我返回的数据帧只有 1 行,那么我如何将其更改为系列。

最佳答案

如果 rowname 是一个 list ,而不是单个元素,

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 会作为列表出现,而不是单个值。

关于python - 有时会返回一个数据框而不是一个系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32176542/

相关文章:

当设置两个条件部分满足彼此而没有 IF 语句或测试组且不作为元组时,Python 正则表达式返回两个结果

python - 从 pandas DataFrame 中的列创建一个元组

Python-机器学习

python - 根据列子文本有条件地更改列数据类型

python - Pandas:如何在 CSV 中查找引发错误的行: "ValueError: could not convert string to float"

c# - 如何将 Python 代码与 C#.Net Core 语言集成?

python - 当我在 PyCharm 中运行时记录 basicConfig 不创建日志文件?

python - 清理 python pandas 中的日期和时间记录

python - CommandError : Can't find xgettext. 与 django i18n

python - 一次将 Python dict 的内容分配给多个变量?