如何在不使用 python 循环的情况下检测和转换列值的单位?

How to detect and convert units of column values without using python loop?

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

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

我的专栏如下:

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

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

注:换算汇率w.r.t美元{欧元:1.2,英镑:1.3,卢比:0.05}

注意:货币枚举是 ['Euro'、'Dollar'、'Pounds'、'Rupee']

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

我建议使用 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