我有一个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?
答案 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。呼!