Для этого вы можете использовать пакет forex-python :
import pandas as pd
import datetime
from forex_python.converter import CurrencyRates
from forex_python.bitcoin import BtcConverter
data = [('A', 1450.22 , 0.120 , None , '2019-08-15')
,('B', None , None , 550 , '2019-09-12')
,('C', None , 0.18 , 1500 , '2019-09-02')
,('D', None , None , 1244 , '2019-09-10')]
colNames = ['Product', 'Price in AUD', 'Price in BTC', 'Price in USD', 'Date']
df = pd.DataFrame(data, columns=colNames)
c = CurrencyRates()
b = BtcConverter()
def convertBtcToAUD(row):
if pd.isna(row['Price in AUD']):
date = datetime.datetime.strptime(row['Date'], '%Y-%m-%d')
aud = b.convert_btc_to_cur_on(row['Price in BTC'], 'AUD', date )
else:
aud = row['Price in AUD']
return aud
def convertUSDToAUD(row):
if pd.isna(row['Price in AUD']):
date = datetime.datetime.strptime(row['Date'], '%Y-%m-%d')
aud = c.convert('USD', 'AUD', row['Price in USD'], date )
else:
aud = row['Price in AUD']
return aud
df['Price in AUD'] = df.apply(convertBtcToAUD, axis=1)
df['Price in AUD'] = df.apply(convertUSDToAUD, axis=1)
Вывод:
Product Price in AUD Price in BTC Price in USD Date
0 A 1450.220000 0.12 NaN 2019-08-15
1 B 799.840372 NaN 550.0 2019-09-12
2 C 2783.197980 0.18 1500.0 2019-09-02
3 D 1814.504710 NaN 1244.0 2019-09-10
PS: имейте в виду, что переполнение стека не выполняетсяслужба написания кода. Я просто дал ответ, потому что меня интересовала проблема.