pandas “DataFrameGroupBy”对象没有属性“set_index”

wfypjpf4  于 2023-01-07  发布在  其他
关注(0)|答案(1)|浏览(461)

我有一个dataFramedata。在分组和重置索引后,我无法将日期列设置为索引。

data = data.groupby('Payment Date ')
data['Payment Amount '].sum().reset_index()

data = data.set_index('Payment Date ', inplace  = True)
 data.index

错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-12-581b0b0bf83f> in <module>
----> 1 data = data.set_index('Payment Date ', inplace  = True)
      2 data.index

c:\users\nitro\appdata\local\programs\python\python37-32\lib\site-packages\pandas\core\groupby\groupby.py in __getattr__(self, attr)
    702 
    703         raise AttributeError(
--> 704             f"'{type(self).__name__}' object has no attribute '{attr}'"
    705         )
    706 

AttributeError: 'DataFrameGroupBy' object has no attribute 'set_index'
6ojccjat

6ojccjat1#

我想我明白你想做什么和你不明白什么(主要是关于用Pandas修改物体的方法)。我假设你想:
1.按data中的付款日期计算汇总
1.然后将其索引设置为"付款日期"字段
简短回答:如果希望将此结果放入data,只需执行以下命令:

data = data.groupby('Payment date ')['Payment amount'].sum().to_frame()

"付款日期"将是您的新索引,to_frame防止您的单列结果 Dataframe 被挤压到PandasSeries(我认为这是您的第一个意图,以避免,重置您的索引,然后设置回)。
让我们深入研究您的代码。

    • 第一行**
data = data.groupby('Payment Date ')

第一行是可以的,但可能不是你想要的。你正在取data,我假设它是一个pandas DataFrame,并将其reaffect为pandas DataFrameGroupBy对象。这种对象不包含任何数据,你可以简单地将其视为原始DataFrame的索引和关联组(这里是支付日期)之间的Map。
不管怎样,你已经把groupby对象放到data中了。

    • 第二行**
data['Payment Amount '].sum().reset_index()

这一行什么也不做,它显示的是Jupyter笔记本中的计算结果,**但是data**中没有任何变化。data仍然是相同的DataFrameGroupBy对象。

    • 第三行**
data = data.set_index('Payment Date ', inplace  = True)

一个异常被抛出,表示一个DataFrameGroupBy对象没有set_index方法。这是因为data没有被你的第二行代码改变。即使如此,我还是建议你在代码中任何时候都要 * 避免 * 使用inplace=True。你应该总是使用 * 显式的 * 重赋值。
您的代码可能如下所示(如果您不喜欢上面的简短答案):

data = data.groupby('Payment date ')
data = data['Payment amount'].sum().reset_index()
data = data.set_index('Payment date ')  # No inplace=True!

相关问题