приведите значение к отрицательному значению с плавающей точкой, если в конце есть знак «-» с pandas

#python #pandas

#python #pandas

Вопрос:

Внутри фрейма данных у меня есть столбец с именем ‘Val’, где у меня есть значения с плавающей запятой, но отрицательные значения представлены знаком ‘-‘ В КОНЦЕ! И поэтому он интерпретируется как объект, т.е.

 >>> df['Val'].drop_duplicates().sort_values()
5          0.00000
1873      0.20000-
496      100.00000
425      2.00000
Name: Val, Length: 4, dtype: object
  

Как я могу преобразовать отрицательные значения в истинные отрицательные значения, а затем преобразовать столбец в float.

Если бы это был список, я бы сделал что-то вроде этого:

 if row[i][-1:] == '-':
    row[i] = float(row[i][:-1]) * -1
else:
    row[i] = float(row[i])
  

Каков способ pandas сделать это?

Ответ №1:

Вы можете использовать loc для исправления только записей, заканчивающихся на -

 mask = df.Val.str.endswith('-')
df.loc[mask, 'Val'] = '-'   df.loc[mask, 'Val'].str[:-1]
  

а затем преобразуйте в числовое dtype

 df['Val'] = pd.to_numeric(df.Val, errors='coerce')
  

Конечный результат

 5         0.0
1873     -0.2
496     100.0
425       2.0
Name: Val, dtype: float64
  

Ответ №2:

Вы можете сделать с str.strip , затем используя np.where с str.endswith

 s1=df.x.str.strip(' |-').astype('float')
np.where(df.x.str.endswith('-'),s1*-1,s1)
array([  0. ,  -0.2, 100. ,   2. ])