【问题标题】:Pandas .apply() function not always being called in python 3Pandas .apply() 函数并不总是在 python 3 中被调用
【发布时间】:2018-10-18 17:43:27
【问题描述】:

您好,我想通过一个函数增加一个全局变量“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)

【问题讨论】:

  • 数据框有 4 列吗?你需要all_data['PoolQC'].apply(cc, axis=1)
  • 轴是申请DataFrame,这里我们申请的是Series

标签: python-3.x pandas global-variables apply


【解决方案1】:

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

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

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

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

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

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

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

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

【讨论】:

  • 是的,关于 pandas 为每个类别计算 apply() 是正确的。 df.apply() 到整个数据框给出了预期的输出。谢谢@Martyna
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-23
  • 2015-12-06
  • 1970-01-01
  • 1970-01-01
  • 2015-12-04
  • 1970-01-01
相关资源
最近更新 更多