如何在不使用 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
据我所知 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