Как конвертировать валютные значения в столбце DataFrame? - PullRequest
0 голосов
/ 02 октября 2019

У меня есть датафрейм со столбцами -

Product    Price in AUD    Price in BTC    Price in USD        Date
  A           1450.22         0.120             NaN         2019-08-15
  B             NaN           NaN               550         2019-09-12
  C             NaN           0.18             1500         2019-09-02
  D             NaN           NaN              1244         2019-09-10

Мне нужно преобразовать все альтернативные цены (Цена в биткойнах и Цена в долларах США) в Price in AUD, где значение Price in AUDнулевой. Если указаны обе альтернативные цены (например, C), я хочу использовать Price in BTC для конвертации в AUD, в зависимости от того, что доступно.

Как я могу это сделать? Существует ли библиотека API или Python, которую я могу использовать для этого, поскольку цены на биткойны и доллары США продолжают колебаться каждый день? Я хотел бы использовать столбец Date, чтобы получить точное значение конвертации в AUD на эту дату. Кто-нибудь делал что-то подобное и может помочь с этим?

1 Ответ

1 голос
/ 02 октября 2019

Для этого вы можете использовать пакет 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: имейте в виду, что переполнение стека не выполняетсяслужба написания кода. Я просто дал ответ, потому что меня интересовала проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...