【问题标题】:Using input parameters of defined function inside apply function在应用函数中使用定义函数的输入参数
【发布时间】:2019-09-25 18:32:43
【问题描述】:

也许是一个非常幼稚的问题,但我被困在这个问题上:pandas.DataFrame.apply 有可能放入一个函数中。

# define function for further usage    
def get_string(df):
        string_input = []
        for id, field in enumerate(df.index):
            string_input.append('<field id="{0}" column="{1}">{2}</field>'.format(id, field, df[field]))
        return '\n'.join(string_input)

如果我在 df 上应用它,我会得到 完美格式化 字符串文件输出

global_1 = '\n'.join(df.apply(get_string, axis=1))

output:
<field id="0" column="xxx">49998.0</field>
<field id="1" column="xxx">37492.0</field>
<field id="2" column="xxx">12029.0</field>

但是为什么我不必像这样在 get_string() 里面放入必要的输入全局参数 df get_string(df)

global_1 = '\n'.join(df.apply(get_string(df), axis=1))

如果我有更多输入全局参数怎么办? 我已经用谷歌搜索了一段时间,但我不是很清楚。谁能给我一些说明性的解释它是如何工作的? 感谢您的帮助。

【问题讨论】:

标签: python pandas apply


【解决方案1】:

您混淆了df 全局变量和df 局部变量。

get_string 函数定义了名为df 的输入变量,这将掩盖更高范围内的任何同名变量。 get_string 知道的 df 是您调用 apply 的数据帧,而不是全局 df。您可以尝试使用不同的数据框:

df = pd.DataFrame({'a': ['Lorem', 'Ipsum']})
x = pd.DataFrame({'b': ['Hello', 'World']})
y = pd.DataFrame({'c': ['Goodbye', 'World']})

global_1 = '\n'.join(df.apply(get_string, axis=1))
global_2 = '\n'.join(x.apply(get_string, axis=1))
global_3 = '\n'.join(y.apply(get_string, axis=1))

print(global_1)
print(global_2)
print(global_3)

结果:

# From the global `df`
<field id="0" column="a">Lorem</field>
<field id="0" column="a">Ipsum</field>
# From x
<field id="0" column="b">Hello</field>
<field id="0" column="b">World</field>
# From y
<field id="0" column="c">Goodbye</field>
<field id="0" column="c">World</field>

【讨论】:

  • 感谢您的精彩解释,但问题来了,当我定义的函数 get_string() 不仅需要像 get_string(df, some_list,..) 这样的 df 时,如何将它放在 apply 函数中,当它只在df上调用?谢谢
  • 您在apply 调用中通过关键字传递它们:df.apply(get_string, axis=1, some_list=..., another_param=...)
猜你喜欢
  • 2022-09-23
  • 2020-09-17
  • 2020-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多