2017-08-13 16 views
1

pandasデータフレームに適用できるカスタム関数を作成しようとしていて、ある通貨の金額を現地通貨の金額(DKK)に前月の最終日(Pstng Dateのベース)。 たとえば、転記日付が2016-03-12の場合、2016-02-28の為替レートに従って金額を換算します。Pandasデータフレーム用のカスタム関数の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'は文字列なので、月、日などのようにその部分を取ることはできません。関数の2行目で、datetimeオブジェクトにします。そこから日付を引き算して' timedelta PstngDate.day) ' – erasmortg

関連する問題