Метод GroupBy, изменяющий тип данных - PullRequest
0 голосов
/ 20 июня 2019

Используя Python3 и Anaconda, у меня есть панды и ОС, импортированные на ipython. У меня очень большой CSV-файл. После использования read_csv для файла я пытаюсь использовать .groupby () для двух столбцов, но он меняет тип данных с DataFrame на DataFrameGroupBy, и я больше не могу запускать методы фрейма данных для него.

Я не могу придумать, что попробовать. У меня очень мало опыта работы с пандами, полученного благодаря codecademy. Кажется, мой код работает там.

import os
import pandas as pd

totals = pd.read_csv('filename')

band_gaps = totals.groupby(['column1','column2'])

band_gaps.info()
AttributeError: Cannot access callable attribute 'info' of 
'DataFrameGroupBy' objects, try using the 'apply' method

type(band_gaps)
pandas.core.groupby.generic.DataFrameGroupBy

Я ожидаю, что когда я запускаю band_gaps.info (), он предоставляет мне информацию для фрейма данных. Вместо этого это дает мне ошибку. Когда я проверяю тип band_gaps, он больше не является фреймом данных, а вместо этого является DataFrameGroupBy.

1 Ответ

0 голосов
/ 21 июня 2019

Если вы посмотрите на Pandas groupby документацию , вы увидите, что она возвращает объект DataFrameGroupBy или SeriesGroupBy, в зависимости от того, вызвали ли вы .groupby на DataFrame или Series.Поэтому поведение, которое вы наблюдали, не должно удивлять.

Более важно, почему Панды делают это?Ну, в вашем случае вы группируете кучу строк вместе.Панды могут придерживаться некоторого представления сгруппированного DataFrame, но не могут с ним ничего делать (т.е. возвращать его вам как другой DataFrame), пока вы не примените функцию агрегирования, такую ​​как .sum или * 1013.*.Функция агрегации берет каждую группу строк и определяет способ превращения этой строки в одну строку.Попробуйте применить одну из этих функций агрегирования к band_gaps и посмотрите, что произойдет.

Например:

df.groupby('column1').mean()

вернет DataFrame, выражающее среднее значение каждого столбца после группировки всех строкпо column1.

df.groupby('column1')['column2'].sum()

вернет Series с суммой значений в column2 после группировки по column1.Обратите внимание, что

df.groupby('column1').sum()['column2']

также возможно, но в этом случае вы берете интересующий вас столбец после агрегирования по всем столбцам, что медленнее, чем нарезка перед агрегацией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...