【问题标题】:Passing an argument as a attribute in a function? [closed]将参数作为函数中的属性传递? [关闭]
【发布时间】:2016-09-29 17:08:33
【问题描述】:

我正在尝试编写一个函数,该函数接受一个函数的非变量。我通常不编写函数,但随着我的学习,我正在努力使我的脚本更加 Pythonic 并节省时间。

例子:

source = pd.DataFrame(
    {
        'Name': ['John', 'Mike', 'John', 'John'],
        'Year': ['1999', '2000', '2000', '2000'],
        'Message': ['I Love You', 'Will Remember You', 'Love', 'I Love You']
    }
)

def unstack(df, keyword):
    d = (df.keyword.str.split(expand=True).stack)

unstack(source, year)

我想要得到的是:

d = (df.year.str.split(expand=True).stack)

我知道将有效键传递给函数是很常见的,但我试图让函数接受参数并将其用作键。

希望你能明白。

【问题讨论】:

  • 我不知道你在说什么。什么是“非变量”?
  • 抱歉,我可能不知道正确的术语。但是这个例子解释得更清楚了。
  • 您的意思是要将单词“year”传递给函数,以便让函数访问对象的“year”属性?
  • 对不起,我还是不明白。你想从 unstack 函数中返回一些东西吗?否则起不了多大作用。该行是否产生错误?
  • 顺便说一句,包括您的imports 将有助于它成为一个完整、可验证的复制器。 import pandas as pd 可能是 pandas 世界的标准约定,但这并不意味着随机 Python 人员知道这是您正在使用的库。 (运送一个 不需要 需要第三方工具(例如 Pandas)的复制器会更好)。见stackoverflow.com/help/mcve

标签: python function pandas


【解决方案1】:

要获取dfkeyword 属性,请使用:

getattr(df, keyword)

因此:

def unstack(df, keyword):
    d = getattr(df, keyword).str.split(expand=True).stack

但是,最好将这部分作为调用约定:

unstack(df.year)    # suggested convention

而不是

unstack(df, 'year') # practice required by the code above

【讨论】:

  • 谢谢。教训很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多