Как обнаружить и преобразовать единицы значений столбца без использования цикла python?

Насколько мне известно, циклы Python медленные, поэтому предпочтительнее использовать встроенные функции pandas.

В моей задаче в одном столбце будут разные валюты, мне нужно конвертировать их в доллары. Как я могу обнаружить и преобразовать их в доллар, используя встроенные функции pandas?

Моя колонка выглядит следующим образом:

100Dollar
200Dollar
100Euro
300Euro
184pounds
150pounds
10rupee
30rupee

Примечание: сумма и название валюты находятся в одном столбце.

Примечание: обменный курс по отношению к доллару {евро: 1,2, фунты: 1,3, рупии: 0,05}

Примечание: перечисление валюты ['Евро', 'Доллар', 'Фунты', 'Рупия']


person Kiran    schedule 21.12.2019    source источник
comment
Нам понадобится конверсия / обменный курс, чтобы иметь возможность сделать это.   -  person Erfan    schedule 21.12.2019
comment
либо вам нужно иметь стандартные валютные термины: EUR, INR, USD и т. д., иначе вы должны дать нам какое-то сопоставление, чтобы сделать это   -  person anky    schedule 21.12.2019


Ответы (2)


Используйте Series.str.extract с регулярными выражениями, чтобы добавить правильные значения в новый столбец. Затем сопоставьте exchange_rate со столбцом Currency, чтобы вычислить Amount dollars:

df[['Amount', 'Currency']] = df['column'].str.extract(r'(\d+)(\D+)')

exchange_rate = {'Euro': 1.2, 'pounds': 1.3, 'rupee': 0.05}
df['Amount_dollar'] = pd.to_numeric(df['Amount']) * df['Currency'].map(exchange_rate).fillna(1) 

      column  Amount Currency  Amount_dollar
0  100Dollar     100   Dollar         100.00
1  200Dollar     200   Dollar         200.00
2    100Euro     100     Euro         120.00
3    300Euro     300     Euro         360.00
4  184pounds     184   pounds         239.20
5  150pounds     150   pounds         195.00
6    10rupee      10    rupee           0.50
7    30rupee      30    rupee           1.50
person Erfan    schedule 21.12.2019
comment
Я понимаю вашу точку зрения, но я думаю, что ОП только что привел пример обменных курсов. Обычно, когда у вас есть финансовые данные, где-то в базе данных хранится таблица обменных курсов с ежедневными обменными курсами для всех валют. По крайней мере, это мой опыт. Я видел пакет, который вы предоставили, и это хорошо, но при работе с финансовыми данными очень сложно убедить регулирующие органы в том, что вы использовали пакет с открытым исходным кодом для конвертации валюты. Хотя эти пакеты в большинстве случаев более точны. - person Erfan; 21.12.2019

Я бы предложил что-то похожее на приведенное ниже, используя пакет CurrencyConverter (проверено Google на точность):

from currency_converter import CurrencyConverter
c = CurrencyConverter()
d={'Dollar':'USD','Euro':'EUR','pounds':'GBP','rupee':'INR'} #mapping dict

m=pd.DataFrame(df['column'].replace(d,regex=True).str.findall(r'(\d+|\D+)').tolist())
new_df=df.assign(USD_VALUE=[c.convert(a,b,'USD') for a,b in zip(m[0],m[1])])

      column   USD_VALUE
0  100Dollar  100.000000
1  200Dollar  200.000000
2    100Euro  110.770000
3    300Euro  332.310000
4  184pounds  242.428366
5  150pounds  197.631820
6    10rupee    0.140999
7    30rupee    0.422996
person anky    schedule 21.12.2019
comment
Никогда не знал об этом пакете. Спасибо, хорошая реализация. +1 - person Ritz; 21.12.2019