2

据我所知,Python 循环很慢,因此最好使用 pandas 内置函数。

在我的问题中,一列将有不同的货币,我需要将它们转换为美元。如何使用 pandas 内置函数检测并将它们转换为美元?

我的专栏如下:

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

注意:金额和货币名称在同一列。

注:换算汇率wrt美元{欧元:1.2,英镑:1.3,卢比:0.05}

注意:货币枚举为 ['Euro', 'Dollar', 'Pounds', 'Rupee']

4

2 回答 2

3

我会建议使用该软件包类似于以下CurrencyConverter内容(用谷歌测试的准确性):

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
于 2019-12-21T16:33:07.083 回答
2

使用Series.str.extract正则表达式将正确的值添加到新列中。然后将 映射exchange_rateCurrency列以计算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
于 2019-12-21T16:10:04.973 回答