Объект DataFrame не имеет атрибута value_counts. Почему это происходит? - PullRequest
0 голосов
/ 17 октября 2019

У меня есть pandas.DataFrame, df, называемые «книгами» со столбцом 'title'.

books = pd.DataFrame([['History of Canada', 'John'], 
                  ['World History', 'Culpher'],
                 ['American Politics', 'Millerson']
                 ], columns=['title','author'])

Когда я бегу, он показывает свою серию:

   titles = books['title']
   type(titles)

pandas.core.series.Series

Но когда я добавляю value_counts() после regex, это даетошибка.

   titles.str.extract(r'(History)', flags=re.I).value_counts()

AttributeError: у объекта 'DataFrame' нет атрибута 'value_counts'

Если вы запустите выше без value_counts () он работает со следующим результатом:

    0
0   History
1   History
2   NaN
  • Почему возникает ошибка?
  • Почему она меняется с Series до DataFrame?

Ответы [ 3 ]

0 голосов
/ 17 октября 2019

как документация здесь pandas.Series.str.extract , есть вызов параметра expand.

Если для параметра развернуть установлено значение True, вернуть DataFrame с одним столбцом на группу захвата. Если False, вернуть значение Series / Index.default равным True. Именно поэтому он возвращает фрейм данных.

0 голосов
/ 17 октября 2019

Вы можете сделать это в одной строке, используя pandas.Series.str.contains().

books.title.str.contains('History').sum()

Выход :

2
0 голосов
/ 17 октября 2019
  • Почему происходит ошибка?
  • Почему она изменяется с Series на DataFrame?

Ответ: Согласно docs , извлечьвозвращает DataFrame по умолчанию, так как по умолчанию expand = True.

Правильный способ - установить expand = False, если вы хотите, чтобы в качестве выходных данных были указаны серии.

Если раскрыть = False и пат имеет только одну группу захвата, затем вернуть серию (если объектявляется серией) или индексом (если объектом является индекс).

titles.str.extract(r'(History)', flags=re.I, expand=False).value_counts()

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