#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('/')))
в моих тестах это на порядок быстрее, и он не будет запускать произвольный код.