关于python:python3更改函数名<…>

Python3 changes function name <…>

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

似乎python更改了func的名称。如果它是函数列表的一部分。因此,python采用func名称"strategy0",并将其更改为不太有用的''(如果它是函数列表的一部分)。

我怎样才能避免python一起更改fct名称,或者使用reg。例如,用适当的fct创建一个新的df列"stratname"。姓名(改回)?

这是我现在看到的df:

1
2
3
4
                                     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

这就是我希望它看起来的样子:

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

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

我的一个好朋友帮我写了下面的代码。但他在熊猫方面并不富裕,所以我们正在努力解决这个问题。

1
2
3
4
5
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不同。用python返回函数名?


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

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

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

所以我的函数列表应该如下所示:

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

现在它工作了,我不需要使用regex。唷!