【问题标题】:Forex_python in custom function for Pandas dataframePandas 数据框的自定义函数中的 Forex_python
【发布时间】:2017-08-13 12:50:00
【问题描述】:

我正在尝试构建一个自定义函数,该函数可以应用于 pandas 数据框,并根据前一天最后一天的汇率将某种货币的金额转换为我当地货币的金额(DKK)月(以Pstng Date 为基数)。 比如,如果过帐日期是 2016-03-12,我想按照 2016-02-28 的汇率换算金额。

我正在使用带有转换功能的 forex-python 库 - 这是我的数据框:

df = pd.DataFrame({
    'Crcy': ['DKK','CAD','GBP','USD'],
    'Pstng Date': ['2017-01-12','2015-12-15','2016-06-06','2017-08-12'],
    'Amount': [100,5000,40,50]
})

这是我的功能:

from forex_python.converter import CurrencyRates
c = CurrencyRates()

def convert_rates2(amount,currency,PstngDate):
    if currency != 'DKK':
        return c.convert(base_cur=currency,dest_cur='DKK',amount=amount \
                         ,date_obj=PstngDate - datetime.timedelta(PstngDate.strftime('%d')))
    else:
        return amount

我尝试将其应用于 df 的方式:

df['Amount, DKK'] = np.vectorize(convert_rates2)(
    amount=df['Amount'],
    currency=df['Crcy'],
    PstngDate=df['Pstng Date']
)

但是,我收到以下错误:

AttributeError: 'str' 对象没有属性 'strftime'

有人知道如何解决这个问题吗?不同的方法也非常受欢迎。

【问题讨论】:

  • 请发布完整的错误信息。

标签: python pandas numpy currency forex


【解决方案1】:

你可以试试这样的:

from datetime import datetime, timedelta

def convert_rates2(amount,currency,PstngDate):
    PstngDate = datetime.strptime(PstngDate, '%Y-%m-%d')
    if currency != 'DKK':
        return c.convert(base_cur=currency,dest_cur='DKK',amount=amount \
                     ,date_obj=PstngDate - timedelta(PstngDate.day))
    else:
        return amount

这将给出以下结果:

df['Amount, DKK'] = np.vectorize(convert_rates2)(
    amount=df['Amount'],
    currency=df['Crcy'],
    PstngDate=df['Pstng Date']
)


df
Out[56]: 
   Amount Crcy  Pstng Date  Amount, DKK
0     100  DKK  2017-01-12          100
1    5000  CAD  2015-12-15        26375
2      40  GBP  2016-06-06          390
3      50  USD  2017-08-12          317

【讨论】:

  • 非常感谢 - 就像一个魅力。你会知道我的方法有什么问题吗?
  • PstngDate 是一个字符串,所以你不能像月、日等那样取它的一部分。在函数的第二行中,我将它设为 datetime 对象,从那里,你可以减去提取日期timedelta(PstngDate.day)
猜你喜欢
  • 2018-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-04
  • 2015-08-28
  • 2021-10-02
相关资源
最近更新 更多