Именованная агрегация df (не сгруппированная) ошибка выдачи: 'TypeError: aggregate () отсутствует 1 обязательный позиционный аргумент:' func ''

2

Когда я воспроизводю пример с именованной агрегацией фрейма данных из документации, я получаю сообщение об ошибке. Документы: https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.aggregate.html Я запускаю Spyder 4.2.5 с Python 3.7, а также получаю ту же ошибку на другом компьютере с Python 3.8 и Jupyter. Ноутбук с Python 3. Pandas версии 1.0.5.

Воспроизводимый код:

import pandas as pd
import numpy as np
df = pd.DataFrame([[1, 2, 3],
                   [4, 5, 6],
                   [7, 8, 9],
                   [np.nan, np.nan, np.nan]],
                  columns=['A', 'B', 'C'])
df.agg(x=('A', max), y=('B', 'min'), z=('C', np.mean))

Что мне не хватает?

Вывод: TypeError: aggregate () отсутствует 1 обязательный позиционный аргумент: 'func'

Отказ от ответственности: первое сообщение о stackoverflow

2
  • 1
    хм, вы забыли проверить версию панд.
    jezrael
    14 июня в 10:25
  • Панды версии 1.0.5 19 июня в 4:42
1

Аргументу функции нужно только 1 значение, как в словаре. См. ниже.

df.agg(dict(A=max, B=min, C=np.mean))
4
  • Ваше предложение (@Rutger) работает, но потребует второго шага, изменив имена на ['x', 'y', 'z']. Я думаю, что идея с named agg заключается в том, чтобы выполнить аггирование и присвоить имена за один раз. Мой пример взят из Pandas Docs, и я удивлен, что он не работает. 19 июня в 4:51
  • 1
    Действительно, очень странно. Я попробовал код, и он отлично работает. Он был представлен в Pandas 0.25. Возможно ли, что ваш код работает с версией venv или Python, отличной от той, которую вы проверяете?
    Rutger
    19 июня в 14:41
  • как я могу проверить, о чем вы просите? Когда я запускаю Spyder, консоль запрашивает Python 3.8.3, а pd .__ version__ дает 1.0.5. Дело в том, что я получаю точно такое же сообщение об ошибке с моего домашнего компьютера с Python 3.7.10 и pandas 1.0.1 в Google Colab, код работает, как ожидалось 20 июня в 12:01
  • 1
    Странно, действительно кажется, что вы все проверили. Вы можете попробовать обновить все пакеты с помощью Anaconda. Если это не сработает, я бы предложил использовать старый код с переименованием. Не такой короткий, как код, который, конечно, должен работать ...
    Rutger
    21 июня в 7:22