Функция Pappas .apply () не всегда вызывается в Python 3 - PullRequest
0 голосов
/ 18 октября 2018

Здравствуйте, я хотел увеличить глобальную переменную 'count' с помощью функции, которая будет вызываться на кадре данных pandas длиной 1458.

Я читал другие ответы, в которых говорится, что .apply () не являетсяна месте.Поэтому я следую их совету, но переменная count по-прежнему равна 4

count = 0
def cc(x):
   global count
   count += 1
   print(count) 

#Expected final value of count is 1458 but instead it is 4
# I think its 4, because 'PoolQC' is a categorical column with 4 possible values
# I want the count variable to be 1458 by the end instead it shows 4


all_data['tempo'] = all_data['PoolQC'].apply(cc)

# prints 4 instead of 1458
print("Count final value is ",count)

1 Ответ

0 голосов
/ 19 октября 2018

Да, наблюдаемый эффект связан с категориальным типом столбца.Это умный из панд, который он просто рассчитывает применить для каждой категории.Считаете только то, что вы там делаете?Наверное, нет, но зачем вам такой расчет?Вы не можете использовать df.shape?

Пара вариантов, которые я вижу здесь:

  1. Вы можете изменить тип столбца, например

all_data['tempo'] = all_data['PoolQC'].astype(str).apply(cc)

Вы можете использовать другой некатегоричный столбец

Вы можете использовать df.shape, чтобы увидеть, сколько строк у вас в df.

Вы можете использовать apply для всего DataFrame, например all_data['tempo'] = df.apply(cc, axis=1).В таком случае вы все еще можете использовать все, что есть в all_data ['PoolQC'] внутри функции cc, например:

def cc(x): global count count += 1 print(count) return x['PoolQC']

...