У меня вопрос о Python численное вычисление букв

#python #pandas #numpy #dataframe #eval

#python #pandas #numpy #фрейм данных #оценка

Вопрос:

 df = pd.DataFrame({'num':['9','','3','7','11']})
col_nm = 'num'
print(df)

  num
0   9
1    
2   3
3   7
4  11
 

Если число больше 5, я преобразую его в 5.
Но после числа 10 преобразование не выполняется.

 string ="np.where(num == '',num,np.where(num >= '5', '5', num))"
string = string.replace(col_nm,"df['" col_nm "']")
df[col_nm] = eval(string)
print(df)

  num
0   5
1    
2   3
3   5
4  11
 

Есть ли какой-либо способ решить логику, используя данные и строку, сохраняя их нетронутыми?

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

1. Я не верю, что ваш вопрос ясен. Каков ваш ожидаемый результат, строки или числа? Кроме того, не очень понятно, чего вы на самом деле пытаетесь достичь.

Ответ №1:

Нам нужно сначала преобразовать to_numeric , а затем использовать назначение условия

 df['num'] = pd.to_numeric(df['num'],errors='coerce')
df.loc[df['num'].between(5,10),'num'] = 5
df
Out[97]: 
    num
0   5.0
1   NaN
2   3.0
3   5.0
4  11.0
 

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

1. @ BEN_YO OP также может использовать clip. df=df.replace(regex=r'', value=np.nan).astype(float) m=df.num.between(5,10) df.clip(m,5,axis=0)