#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. ])