унифицированная функция для последовательности замещающих функций - PullRequest
1 голос
/ 26 сентября 2019

Я применил некоторую последовательность функций к переменной моего фрейма данных.Переменная var моего фрейма данных выглядит следующим образом:

df['var'].head()
0     R$ 140.284,04
1    R$ -200.131,47
2     R$ -77.837,78
3     R$ 524.782,95
4     R$ 871.251,02
Name: var, dtype: object

Я хотел бы заменить:

  1. "R $" на "" (Другими словами, drop "R $ ")
  2. ". "by "" (другими словами, drop ".")
  3. "," by "."
  4. преобразовать в число с плавающей точкой

Я пробовал что-то вроде этого:

def rep1(x):
    return(x.replace('R$',''))


def rep2(x):
    return(x.replace('.',''))

def as_float(x):
    return(float(x.replace(',','.')))


df['var'] = df['var'].map(rep1)
df['var'] = df['var'].map(rep2)
df['var'] = df['var'].map(as_float)

Обратите внимание, что для того, чтобы они работали, я должен был соблюдать порядок, показанный выше при применении последовательности функций.Это действительно работает, но я бы хотел более короткий и элегантный синтаксис.Кроме того, я хотел бы применить одну и ту же процедуру к нескольким переменным одновременно.Как то так:

df['var', 'var2'] = df['var', 'var2'].map(my_unified_function)

1 Ответ

0 голосов
/ 26 сентября 2019

Поскольку у вас есть цепочка replace, нам нужно вызвать replace в пандах дважды

pd.to_numeric(df['var'].replace({'[R$]':'','[.]':''},regex=True).replace({',':'.'},regex=True))
Out[361]: 
0    140284.04
1   -200131.47
2    -77837.78
3    524782.95
4    871251.02
Name: var, dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...