почему 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 шт):
Дело в том, что и 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