почему pandas не исключает автоматически столбцы без чисел?

data = [['Mark', 55, 'Italy', 4.5, 'Europe'],
        ['John', 33, 'USA', 6.7, 'America'],
        ['Tim', 41, 'USA', 3.9, 'America'],
        ['Jenny', 12, 'Germany', 9.0, 'Europe']]

df = pd.DataFrame(data=data,
                  columns=['name', 'age', 'country', 'score', 'continent'],
                  index=[1001, 1000, 1002, 1003])

df.groupby(['continent']).agg(lambda x: x.max() - x.min())

TypeError: unsupported operand type(s) for -: 'str' and 'str'

в книге Python для Excel приводится такой пример с припиской "Все столбцы без чисел автоматически исключаются", с функцией mean() такая же проблема, но если там решается аргументом numeric_only=True, то на похожий пример решения на просторах интернета я не нашел , даже в документации pandas пишется, что сначала есть попытка применить ко всем элементам таблицы, потом только numberic, но ни о каких ошибках там речи нет, может я что то не так делаю?

мне нужно вывести кусок таблицы с числовыми столбцами без дополнительных действий и столбцов


Ответы (1 шт):

Автор решения: CrazyElf

Дело в том, что и groupby и agg и max и min прекрасно работают со строками, и аргументов для того, чтобы оставить только числа у них нет, поэтому ошибка и возникает только при попытке в самом конце уже вычесть одну строку из другой. Либо вам нужно отобрать заранее только числовые столбцы, как предложено в комментарии, либо могу предложить ещё такой вариант с вычислением min и max только по числовым столбцам:

gb = df.groupby(['continent'])
gb.max(numeric_only=True) - gb.min(numeric_only=True)

Вывод:

         age    score
continent       
America    8    2.8
Europe    43    4.5
→ Ссылка