繁体   English   中英

以 pandas 的每日汇率转换价格

[英]Convert prices with daily rate in pandas

我目前正在尝试用不同货币( pricecurrency )的价格( pricevalue )规范化 DataFrame(~600k 行),以便每一行都有欧元的价格。

我想将它们转换为从列date获取的每日费率。

我当前的“解决方案”(使用在 PyPI 上找到的CurrencyConverter package)如下所示:

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)

然而,这个解决方案需要很长时间才能运行。

有没有更快的方法来实现这一点? 任何帮助表示赞赏:)

这么说听起来很奇怪,但不幸的是你没有做错任何事!

货币插值代码正在做你需要它做的事情,而不是别的。 在您的代码中,您所做的一切都是正确的。 这意味着您无法通过快速修复来获得性能。 你有一个双 lambda 你只需要一个,但这不会有太大的区别:

IE

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

应该

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

首先要做的是通过添加一些 UI 来了解此处理实际需要多长时间:

from tqdm import tqdm

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

一旦您知道这项工作实际需要多长时间,请按顺序尝试这些:

  1. 忍受它。
  2. 单实例并行化,类似于pandarallel
  3. 多实例并行化,例如Dask

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM