Pandas.pivot TypeError: super(type, obj): obj 必须是 type 的实例或子类型

问题描述 投票:0回答:1

我有一些代码在将 pandas 从 1.3.2 更新到 2.1.1 后停止工作。 我不明白为什么以及如何解决它,因为我不清楚这个错误。帮我想想办法。

我的代码片段:

import pandas as pd

d = {'value': [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0],
     'x_axis_date': ['2020-01-01', '2020-01-02', '2020-01-03', '2020-01-04', '2020-01-05', '2020-01-06', '2020-01-07',
                     '2020-01-08', '2020-01-09', '2020-01-10'],
     'curve_year': [2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019, 2019]}
df = pd.DataFrame(data=d)
df = df.assign(x_axis_date=pd.to_datetime(df['x_axis_date']))

# dtypes: float64, datetime64[ns], int64
pv_aggregate_agg = pd.pivot_table(df, index=df.x_axis_date, values=['value'], aggfunc=pd.DataFrame.mean) # error here
print(pv_aggregate_agg)

堆栈跟踪:

Traceback (most recent call last):
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\generic.py", line 1495, in aggregate
    result = gba.agg()
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\apply.py", line 178, in agg
    return self.agg_list_like()
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\apply.py", line 311, in agg_list_like
    return self.agg_or_apply_list_like(op_name="agg")
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\apply.py", line 1351, in agg_or_apply_list_like
    keys, results = self.compute_list_like(op_name, selected_obj, kwargs)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\apply.py", line 370, in compute_list_like
    new_res = getattr(colg, op_name)(func, *args, **kwargs)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\generic.py", line 255, in aggregate
    ret = self._aggregate_multiple_funcs(func, *args, **kwargs)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\generic.py", line 360, in _aggregate_multiple_funcs
    results[key] = self.aggregate(func, *args, **kwargs)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\generic.py", line 292, in aggregate
    return self._python_agg_general(func, *args, **kwargs)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\generic.py", line 325, in _python_agg_general
    result = self.grouper.agg_series(obj, f)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\ops.py", line 850, in agg_series
    result = self._aggregate_series_pure_python(obj, func)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\ops.py", line 871, in _aggregate_series_pure_python
    res = func(group)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\groupby\generic.py", line 322, in <lambda>
    f = lambda x: func(x, *args, **kwargs)
  File "E:\repos\plot_graphs\venv\lib\site-packages\pandas\core\frame.py", line 11335, in mean
    result = super().mean(axis, skipna, numeric_only, **kwargs)
TypeError: super(type, obj): obj must be an instance or subtype of type
python pandas dataframe pivot-table
1个回答
0
投票

使用

mean
代替
pd.DataFrame.mean
:

pv_aggregate_agg = pd.pivot_table(df, index=df.x_axis_date, values=['value'], 
                                  aggfunc='mean')
print(pv_aggregate_agg)

# Ouput
             value
x_axis_date       
2020-01-01     1.0
2020-01-02     1.0
2020-01-03     1.0
2020-01-04     1.0
2020-01-05     1.0
2020-01-06     1.0
2020-01-07     1.0
2020-01-08     1.0
2020-01-09     1.0
2020-01-10     1.0
© www.soinside.com 2019 - 2024. All rights reserved.