首页 > 解决方案 > 我试图运行这段代码,但由于某种原因它不起作用有人可以帮助我吗?

问题描述

for i in df.Revenue:
  if df.Revenue.index(i) <= df.Revenue.mean():
    df.Revenue.index(i) = 0
  else:
    df.Revenue.index(i) = 1
print(df.Revenue)

并且语法错误是:无法分配给函数调用

标签: pythonpandasnumpy

解决方案


因此,该函数df.Revenue.index(i)为您提供了df.Revenue. 这是一个类似的例子:

d = {"a": [0.1, 0.2, 0.3, 0.4], "b": [1.0, 2.0, 3.0, 4.0], "c": [2.0, 4.0, 6.0, 8.0]}
df = pd.Series(d)
print(df.a.index(0.3)) # output: 2

上面代码的输出是2因为对于a项目,值的索引0.32,因为位于的项目a[0.1, 0.2, 0.3, 0.4]

所以,在你的情况下,如果你想df.Revenue用不同的值替换一个值,你首先要通过获取项目的索引idx = df.Revenue.index(value),然后通过设置它df.Revenue[idx] = newvalue

但是,根据您的代码的其余部分,包括行df.Revenue.index(i) <= df.Revenue.mean(),我认为您可能只需要使用df.Revenue[i], 并将实际索引用于值i而不是Revenue. 这是因为df.Revenue.index(i)返回一个索引,但您将它与 进行比较df.Revenue.mean(),这是 的值的平均值Revenue,因此将索引与值进行比较实际上没有意义。

因此,您的代码可能需要看起来像这样,尽管在不知道其确切要求的情况下我无法确定:

for value, i in enumerate(df.Revenue):
  if value <= df.Revenue.mean():
    df.Revenue[i] = 0
  else:
    df.Revenue[i] = 1
print(df.Revenue)

或者,没有enumerate

for i in range(len(df.Revenue)):
  if df.Revenue[i] <= df.Revenue.mean():
    df.Revenue[i] = 0
  else:
    df.Revenue[i] = 1
print(df.Revenue)

但是我不知道这个pandas库,所以可能有一种更简单的方法可以做到这一点,但我主要是想尽可能地展示与你的代码相似的代码,除了它实际上是你想要的。


推荐阅读