python 中是否有一种快速方法可以将字符串'1/100'转换为浮点数 0.01?



我有这个df:

Home    Away    5+ corners  6+ corners  7+ corners  8+ corners  9+ corners  10+ corners 11+ corners 12+ corners 13+ corners 14+ corners
0   Aston Villa Leeds   1/100   1/50    1/20    1/8 1/4 4/9 4/6 11/10   13/8    5/2
1   West Ham    Manchester City 1/100   1/33    1/12    1/6 1/3 4/7 10/11   11/8    2/1 3/1
2   Fulham  Crystal Palace  1/66    1/33    1/10    1/5 2/5 4/6 11/10   7/4 5/2 4/1
3   Manchester Utd  Chelsea 1/66    1/33    1/8 1/5 2/5 8/11    11/10   15/8    11/4    4/1
4   Liverpool   Sheffield Utd   1/100   1/50    1/20    1/8 2/7 4/9 8/11    11/10   7/4 5/2
5   Southampton Everton 1/66    1/33    1/12    1/5 4/11    8/13    1/1 13/8    5/2 7/2
6   Wolves  Newcastle   1/50    1/20    1/8 2/7 1/2 4/5 5/4 2/1 3/1 5/1
7   Arsenal Leicester   1/100   1/33    1/12    1/6 1/3 1/2 10/11   11/8    2/1 3/1
8   Brighton    West Brom   1/66    1/33    1/8 1/4 2/5 4/6 11/10   7/4 11/4    4/1
9   Burnley Tottenham   1/100   1/33    1/12    1/6 1/3 4/7 10/11   11/8    9/4 3/1

我想把它转换成十进制赔率。

我知道我可以使用.split('/')来实现这一点,但我想知道是否有更快的方法。

根据@ch3steR的建议,使用pd.eval并尝试此

df['col_name'] = pd.eval(target=df, expr=df['col_name'])

eval函数怎么样?

result = eval('1/2')

编辑:正如评论者所指出的,eval有安全隐患,因为它有可能执行任意代码。

您可以同时使用熊猫applyeval

df.loc[:,'5+ corners':] = df.loc[:,'5+ corners':].apply(pd.eval)
>>> print(df)
>>>
Home            Away     5+ corners  ... 12+ corners 13+ corners 14+ corners
0     AstonVilla           Leeds       0.01  ...         1.1       1.625         2.5
1        WestHam  ManchesterCity       0.01  ...       1.375           2           3
2         Fulham   CrystalPalace  0.0151515  ...        1.75         2.5           4
3  ManchesterUtd         Chelsea  0.0151515  ...       1.875        2.75           4
4      Liverpool    SheffieldUtd       0.01  ...         1.1        1.75         2.5

这只适用于最多100行的数据帧,请参阅此处的

最新更新