【问题标题】:Pandas - df.pipe() - keyword can't be an expressionPandas - df.pipe() - 关键字不能是表达式
【发布时间】:2017-06-28 08:04:52
【问题描述】:

目前我在处理 pandas 时遇到了一些问题……

我正在尝试定义以下函数:

def outlier(frame, col1, col2):
    (frame.pipe(frame.loc[:,"lower"] = frame.groupby(by='col1')['col2'].transform(lower))
     frame.pipe(frame.loc[:,"upper"] = frame.groupby(by='col1')['col2'].transform(upper))
     frame.pipe(frame.loc[:,"outlier"] = (frame['col2'] < frame['lower'])|(frame['col2'] > frame['upper']))
    )

不幸的是,我得到: SyntaxError: 关键字不能是表达式

有些东西阻止我只见树木不见森林,也无法发现我明显愚蠢的错误......

在以下代码中有效:

这是函数“upper”和“lower”:

lower = lambda x: x.quantile(q=.25) - (1.5*(x.quantile(q=.75)-x.quantile(q=.25)))
upper = lambda x: x.quantile(q=.75) + (1.5*(x.quantile(q=.75)-x.quantile(q=.25)))

这是我将新列添加到 DataFrame 的“意大利面条代码”:

acid81.loc[:,"lower"] = acid81.groupby(by='Ursprung')['Analysenwert'].transform(lower)
acid81.loc[:,"upper"] = acid81.groupby(by='Ursprung')['Analysenwert'].transform(upper)
acid81.loc[:,"outlier"] = (acid81['Analysenwert'] < acid81['lower']) | (acid81['Analysenwert'] > acid81['upper'])

【问题讨论】:

  • .transform(lower)
  • 通常不是 - 这个较低的代表已经定义的另一个函数。
  • 那你应该给我们看minimal reproducible example
  • edit您的问题提供所需的信息。错误似乎是您使用表达式作为关键字。参见例如this question。你如何调用你的异常值函数?
  • 再次,请edit您的问题。请尝试格式化代码并检查您是否复制粘贴了所有内容。我只是计算了左括号的数量,它与右括号的数量不匹配。您当前的示例代码中有一个左括号太多。

标签: python pandas


【解决方案1】:

作为参考,这里是与 cmets 中的 OP 讨论的答案:

问题是您使用了pipe 错误。 pipe 的第一个参数应该是一个函数。更多信息请见the official documentation

参数:

函数:函数

函数应用于 NDFrame。 args 和 kwargs 被传递给 func。或者一个 (callable, data_keyword) 元组,其中 data_keyword 是一个字符串,指示期望 NDFrame 的 callable 的关键字。

args : 传递给 func 的位置参数。

kwargs : 传递给 func 的关键字参数字典。

你必须找到另一种方法来创建你的 DataFrame。

对此最简单的解决方案是将其排除在外。在这种情况下,您不需要使用 pipe。只需坚持您的示例并将其放入outlier-函数中即可。然后返回生成的 DataFrame。

【讨论】:

    猜你喜欢
    • 2013-06-04
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 2020-02-10
    • 1970-01-01
    • 2016-09-26
    • 2012-05-19
    • 2012-07-22
    相关资源
    最近更新 更多