Передача параметров функции Python - PullRequest
0 голосов
/ 29 мая 2018

Я пытаюсь написать простую функцию, которая даст мне количество уникальных значений из определенного столбца в pandas df.Я хотел бы использовать имя столбца в качестве параметра функции.Однако параметр не распознается как строка внутри функции.

Вот то, что я пытаюсь преобразовать в функцию, где c_type - это имя столбца .

c_type_count = data.groupby('c_type').c_type.count()

Вот функция.Я использую параметр column для передачи имени столбца:

def uniques(column):
    count = data.groupby(column).column.count()
    print(count)

Часть groupby (column) работает с отступом, но вторая ссылка .column остается как .columnи я получаю сообщение об ошибке, потому что в df нет столбца с таким именем.

Я понимаю, что там происходит, но, поскольку я новичок в Python, я не обязательно знаю, кто должен переключать синтаксис.

Ответы [ 2 ]

0 голосов
/ 29 мая 2018

Это специально, в вашем примере вы вызываете метод column объекта GroupBy, python никогда не ищет значение столбца в текущей области.Что вам нужно, так это встроенная функция getattr(), которая будет получать атрибут / метод объекта по его строковому имени.

def uniques(column):
    count = getattr(data.groupby(column), column).count()
    print(count)
0 голосов
/ 29 мая 2018

Я думаю, вы просто ищете value_counts()

data['c_type'].value_counts()

Дает именно то, что вы описываете, что вы ищете.

Пример:

>>> data
  b_type c_type
0      d      b
1      d      a
2      d      a
3      c      a
4      c      a
5      d      b
6      c      a
7      d      b
8      c      b
9      c      a

>>> data['c_type'].value_counts()
a    6
b    4

Как исправить свою пользовательскую функцию

Если вы хотите продолжать использовать свою пользовательскую функцию, вам просто нужно использовать стандартное индексирование, а неиндексирование атрибутов, другими словами, используйте квадратные скобки вместо точечной нотации для доступа к вашему столбцу.См. документацию по индексированию для получения дополнительной информации

def uniques(column):
    count = data.groupby(column)[column].count()
    # Alternatively:
    # count = data.groupby(column).size()
    print(count)

Это работает так, как вы хотите:

>>> uniques('c_type')
c_type
a    6
b    4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...