2017-08-13 285 views
1

我想建立可應用於大熊貓數據框自定義功能,將一些貨幣的注入量量我的當地貨幣(DKK)自定義函數根據的匯率前一個月的最後一天(基地位於Pstng Date)。 因此,舉例來說,如果過帳日期是2016年3月12日,我想根據2016年2月28日的匯率將金額兌換。Forex_python在熊貓數據幀

我現在用的是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' object has no attribute 'strftime'

有沒有人有如何解決這個問題的想法?不同的方法也非常受歡迎。

+0

請張貼完整的錯誤消息。 – DyZ

回答

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 
+0

非常感謝 - 像魅力一樣工作。你會碰巧知道我的方法是錯誤的嗎? – Alex5207

+1

'PstngDate'是一個字符串,所以你不能把它的部分一樣,月,日等在該函數的第二行,我讓一個DateTime對象,從那裏,你可以在。減去提取日期吧'timedelta( PstngDate.day)' – erasmortg