Python3更改了函数名称< ...>

时间:2015-05-27 14:57:00

标签: python pandas

我有一个pandas df,其中一列列出了用于在df的那一行获得结果的特定函数。

似乎Python更改了func的名称。如果它是功能列表的一部分。所以Python采用了func名称&#39; strategy0&#39;如果它是函数列表的一部分,则将其更改为不太有用的'<function strategy0 at 0x0000000009CCA488>'

如何避免Python全部更改fct名称或使用Reg。防爆。创建一个新的df列&#39; stratname&#39;与适当的fct。名字(改回来)?

这是我现在看来的df:

                                     Strategy Ticker         ROI
0  <function strategy0 at 0x0000000009CCA488>   nflx  142.976946
1  <function strategy0 at 0x0000000009CCA488>   lnkd   61.710992
2  <function strategy0 at 0x0000000009CCA488>    hsp    8.589611

这就是我希望它的样子:

    Strategy Ticker         ROI
0  strategy0   nflx  142.976946
1  strategy0   lnkd   61.710992
2  strategy0    hsp    8.589611

这样,列信息可以直接用作新函数的输入。

我的一位好朋友帮我看了下面的代码。但他并不擅长大熊猫,所以我们有点挣扎。

def format(x):
    m = re.search(r'<function\s+(strategy\d+)\s+.*, x)
    return m.groups(1)

df_max_res['stratname'] = df_max_res['Strategy'].applymap(format)

这似乎看起来很像我的问题,但显然Python3处理这个不同于P2。 Return function name in python?

2 个答案:

答案 0 :(得分:1)

另一种解决方案,如果你喜欢地图和列表

strategies = list(map(lambda x: x.__name__, strategies))

答案 1 :(得分:0)

它在Python3中显然接受f.__name__但不接受f.func_name

所以我的功能列表需要如下所示:

strategies = [strategy0.__name__, strategy1.__name__, strategy2.__name__, strategy3.__name__]

现在它有效,我确实需要使用RegEx。呼!