Python Pandas - 使用currency_converter创建新列

时间:2018-05-01 09:25:53

标签: python pandas

我有一个像这样的数据帧(dfFF):

   Sector   Country           Currency    Amount     Fund Start Year
0  Public     USA                USD        22000      2016
0  Private    Hong Kong          HKD        42000      2015
...

我想创建一个新列,将currency/amount/fund start year转换为欧元,然后转换为GBP(currency_converter只转换为欧元或返回的所有内容,因此我不会直接转换为GBP)。我想要资金发生的那一年的货币汇率。

我正在使用网站提供的模板代码: https://pypi.org/project/CurrencyConverter/

from currency_converter import CurrencyConverter
from datetime import date
c = CurrencyConverter()  
c.convert(100, 'EUR', 'USD', date=date(2013, 3, 21))

我想每年1月1日使用它来保持一致,所以我尝试了以下操作:

c = CurrencyConverter()
dfFF['Value'] = (c.convert(dfFF['Amount'],dfFF['Currency'],
'EUR',date=date(dfFF['Fund Start Year'],1,1)))

我收到错误:

TypeError: 'Series' objects are mutable, thus they cannot be hashed

虽然我觉得我的解决方案不是最好的方法。

有什么建议吗?即使我刚刚进入EUROS,然后我也可以将其转换为英镑,这将是非常好的。

谢谢

1 个答案:

答案 0 :(得分:1)

您已创建一个使用行数据转换货币的功能:

def currency_convertor(row):
 amount = row['amount']
 curr = row['Currency'], 
 date_r = row['Fund Start Year']
 new_curr = c.convert(amount,curr,'EUR',date=date(date_r,1,1))
 return new_curr

然后将其应用于dataframe:

dfFF['EUR_new'] = dfFF.apply(currency_convert, axis=1) # make sure to set axis=1

一般版本

def currency_convertor(row,new_currency='EUR'):
 amount = row['amount']
 curr = row['Currency']
 date_r = row['Fund Start Year']
 new_curr = c.convert(amount,curr,new_currency,date=date(date_r,1,1))
 return new_curr

dfFF['new_currency'] = dfFF.apply(lambda x: currency_convertor(x,new_currency="GBP"), axis=1)