Конвертируйте цены с дневной ставкой в ​​pandas - PullRequest
1 голос
/ 06 мая 2020

Я сейчас пытаюсь нормализовать DataFrame (~ 600 тыс. Строк) с ценами (pricevalue) в разных валютах (pricecurrency), чтобы в каждой строке были цены в евро.

Я бы хотели бы преобразовать их с дневной скоростью, взятой из столбца date.

Мое текущее «решение» (с использованием пакета CurrencyConverter , найденного в PyPI) выглядит так:

from currency_converter import CurrencyConverter

c = CurrencyConverter(fallback_on_missing_rate=True,fallback_on_missing_rate_method="last_known")

def convert_currency(row):
     return c.convert(row["pricevalue"], row["pricecurrency"],row["date"])

df["converted_eur"] = df.apply(lambda x: convert_currency(x),axis=1)

Однако выполнение этого решения требует вечности.

Есть ли более быстрый способ выполнить sh это? Любая помощь приветствуется :)

1 Ответ

0 голосов
/ 06 мая 2020

Это звучит странно, но, к сожалению, вы не делаете ничего плохого!

Код интерполяции валюты выполняет то, что вам нужно, и не более того. В своем коде вы все делаете правильно. Это означает, что нет ничего, что можно было бы быстро исправить для повышения производительности. У вас есть двойная лямбда, где вам нужна только одна, но это не будет иметь большого значения:

т.е.

df["converted_eur"] = df.apply(lambda x: convert_currency(x),axis=1)

должно быть

df["converted_eur"] = df.apply(convert_currency, axis=1)

Первое, что нужно сделать, это понять, сколько времени фактически займет эта обработка, добавив некоторый пользовательский интерфейс:

from tqdm import tqdm

df["converted_eur"] = df.progress_apply(convert_currency, axis=1)

Как только вы узнаете, сколько времени фактически займет работа возьмите, попробуйте их по порядку:

  1. Живите с этим.
  2. Распараллеливание одного экземпляра, например, pandarallel
  3. Несколько экземпляров распараллеливание, что-то вроде Dask
...