Мой фрейм данных выглядит так:
Name Overall Rating Value in Millions
0 Neymar Jr 92 €105.5M
1 L. Messi 94 €95.5M
2 K. Mbappé 89 €93.5M
3 V. van Dijk 91 €90M
4 K. De Bruyne 91 €90M
... ... ... ...
19692 I. Isa 63 €0
19693 I. Fetfatzidis 74 €0
19694 M. Mohsen 66 €0
19695 B. Jokič 72 €0
19696 B. Sigurðarson 73 €0
Я пытаюсь применить функцию к 3-му столбцу «Значение в миллионах», чтобы преобразовать значения из строкового формата в числа с плавающей запятой:
#A function to convert the values in the third row from strings to floats
def value_to_float(value_as_string): # eg.'€95.5M'
value_as_string = value_as_string.strip('€')
if 'M' in value_as_string: #95.5M - string
value_as_string = value_as_string.strip('M') #95.5 - string
multiplier = float(value_as_string) #95.5 - float
value_as_float = multiplier * 1000000 #95000000.0 - float
if 'K' in value_as_string:
value_as_string = value_as_string.strip('K')
multiplier = float(value_as_string)
value_as_float = multiplier * 1000 #Same as above, in case of K(Thousands)
return value_as_float
Функция работает правильно, если задан явный параметр:
value_to_float('€95.5M')
95500000.0
Однако, когда я пробую следующее:
players["Value in Millions"].apply(value_to_float)
, я получаю эту ошибку:
---------------------------------------------------------------------------
UnboundLocalError Traceback (most recent call last)
<ipython-input-80-3d3345f9405d> in <module>
----> 1 players["Value in Millions"].apply(value_to_float)
~/anaconda3/lib/python3.7/site-packages/pandas/core/series.py in apply(self, func, convert_dtype, args, **kwds)
3846 else:
3847 values = self.astype(object).values
-> 3848 mapped = lib.map_infer(values, f, convert=convert_dtype)
3849
3850 if len(mapped) and isinstance(mapped[0], Series):
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-61-158745b17930> in value_to_float(value_as_string)
15 value_as_float = multiplier * 1000 #Same as above, in case of K(Thousands)
16
---> 17 return value_as_float
UnboundLocalError: local variable 'value_as_float' referenced before assignment
Я пробовал несколько других методов (series.map (), oldschool looping), но всегда получаю одну и ту же ошибку, поэтому я склонен думать, что где-то в logi c пробел.