Преобразование строки a / b в float в pandas

#python #string #pandas #dataframe

#python #строка #pandas #фрейм данных

Вопрос:

У меня есть фрейм данных, подобный этому:

         score  year
         5/5   2019
         1/2   2018
          A    2019
  

Я хочу преобразовать score из string в float, например, 5/5 = 1, 1/2 = 0,5, я пытался to_numeric, но поскольку мои значения находятся в форме a / b, он возвращает мне none. Пожалуйста, помогите мне с этим.

Ответ №1:

Вы можете использовать оператор pandas.eval with try-except :

 def func(x):
    try:
        return pd.eval(x)
    except Exception:
        #for return original
        return x
        #for return None
        #return None

df['new'] = df['score'].apply(func)
print (df)
  score  year  new
0   5/5  2019    1
1   1/2  2018  0.5
2     A  2019    A
  

Если есть только разделение, это более быстрое решение от @Goyo, спасибо:

 import operator

def func(x):
    try:
        return operator.truediv(*map(int, x.split('/')))
    except Exception:
        #for return original
        return x
        #for return None
        #return None
  

Комментарии:

1. Могу ли я что-либо сделать, чтобы вернуть любой символ, поскольку None, слишком похожий на A, будет установлен в None

2. @BarotShalin — конечно, только измените return x на return None

3. Понял! Большое вам спасибо!

4. operator.truediv(*map(int, x.split('/'))) в моих тестах это на порядок быстрее, и он не будет запускать произвольный код.