AttributeError: у объекта 'int' нет атрибута 'count' при использовании метода itertuples () с фреймами данных - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь перебрать строки в Pandas кадре данных, используя метод itertuples (), который в моем случае работает вполне нормально. Теперь я хочу проверить, находится ли указанное значение c ('x') в указанном кортеже c. Для этого я использовал метод count (), так как мне нужно использовать количество вхождений x позже.

Странная часть для некоторых кортежей, которая работает просто отлично (т.е. в моем случае (namedtuple [7] ] .count ('x')) + (namedtuple [8] .count ('x'))), но для некоторых (то есть namedtuple [9] .count ('x')) я получаю AttributeError: 'int' У объекта нет атрибута 'count'

Буду очень признателен за вашу помощь!

1 Ответ

0 голосов
/ 24 февраля 2020

Очевидно, некоторые столбцы вашего DataFrame имеют тип object (на самом деле string ), а некоторые из них имеют тип int (в более общем случае - числа) ).

Для подсчета вхождений x в каждой строке необходимо:

  1. Применить функцию к каждой строке, которая:

    • проверяет, является ли тип текущего элемента str ,
    • , если это так, возвращает count ('x') ,
    • , если нет, вернуть 0 (не пытайтесь искать x в числе).
  2. Пока эта функция возвращает Series с числом x в каждом столбце (отдельно), поэтому для вычисления суммы по всей строке эта Series должна быть

Пример рабочего кода:

Тестовый фрейм данных:

     C1   C2  C3
0  axxv  bxy  10
1    vx   cy  20
2    vv   vx  30

Код:

for ind, row in df.iterrows():
    print(ind, row.apply(lambda it:
        it.count('x') if type(it).__name__ == 'str' else 0).sum())

(в по моему мнению, iterrows здесь удобнее).

Результат:

0 3
1 1
2 1

Итак, как вы можете видеть, можно подсчитать вхождения x , даже если некоторые столбцы не строки.

...