首页 > 解决方案 > Pandas .apply() 函数并不总是在 python 3 中被调用

问题描述

您好,我想通过一个函数来增加一个全局变量“count”,该函数将在长度为 1458 的 pandas 数据帧上调用。

我已经阅读了他们谈论 .apply() 没有到位的其他答案。因此我听从他们的建议,但计数变量仍然是 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)

标签: python-3.xpandasglobal-variablesapply

解决方案


是的,观察到的效果是因为您具有列的分类类型。这是熊猫的聪明之处,它只计算适用于每个类别。只计算你在那里做的事情吗?我猜不是,但为什么你需要这样的计算?你不能使用 df.shape 吗?

我在这里看到的几个选项:

  1. 您可以更改列的类型,例如

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

  1. 您可以使用不同的非分类列

  2. 您可以使用df.shape查看 df 中有多少行。

  3. 您可以将 apply 用于整个 DataFrame,例如all_data['tempo'] = df.apply(cc, axis=1). 在这种情况下,您仍然可以在 cc 函数中使用 all_data['PoolQC'] 中的任何内容,例如:

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


推荐阅读