Очевидно, некоторые столбцы вашего DataFrame имеют тип object (на самом деле string ), а некоторые из них имеют тип int (в более общем случае - числа) ).
Для подсчета вхождений x в каждой строке необходимо:
Применить функцию к каждой строке, которая:
- проверяет, является ли тип текущего элемента str ,
- , если это так, возвращает count ('x') ,
- , если нет, вернуть 0 (не пытайтесь искать x в числе).
Пока эта функция возвращает 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 , даже если некоторые столбцы не строки.