You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python/pandas获取历史汇率时如何加速批量货币转换

问题核心原因

你当前代码效率极低的根源和pandas性能无关,是两个完全可以避免的问题:

  1. 逐行处理时每次都重新初始化CurrencyRates对象,产生大量无意义开销
  2. 每处理1条记录就发起1次独立网络请求拉取汇率,网络IO延迟是所有操作里最慢的环节,大量重复请求完全浪费。你总共只有10种计价货币,绝大多数相同日期相同货币的汇率被重复请求了成百上千次。
优化思路

核心逻辑就是尽量减少网络请求次数,所有网络请求只做一次,剩下的计算全部在本地完成:

  • 全局只初始化一次汇率转换器,不要在循环/转换函数里反复新建实例
  • 从全量数据中提取所有不重复的「货币+续费日期」组合,只对这些唯一组合发起一次汇率请求,相同组合直接复用结果
  • 拿到所有需要的汇率后在本地做映射匹配,批量计算加元成本,不要逐行调用接口
  • 遇到接口限频可以在请求循环里加极短的等待时间,就算加等待总耗时也会比原方案低几个数量级
可直接运行的优化代码
import pandas as pd
import time
!pip install forex-python
from forex_python.converter import CurrencyRates

# 全局初始化一次转换器即可
cr = CurrencyRates()

# 加载数据集,替换为你自己的全量数据读取逻辑
dummy_data = {
        'siteid': ['11', '12', '13', '41', '42','51'],
        'userid': [0,0,0,0,0,0],
        'domain': ['A',  'B',  'C',  'E',  'F', 'G'],
        'currency':['MXN',  'CAD',  'USD',  'USD',  'AUD', 'HKD'],
        'servicecost': [2.5,  3.3,  1.3,  2.5,  2.5, 2.3],
        'date': ['2022-02-04',  '2022-03-05',  '2022-01-03',  '2021-04-06',  '2022-12-05', '2022-11-01']
        }
df = pd.DataFrame(dummy_data, columns = ['siteid', 'userid', 'domain','currency','servicecost','date'])
df['date'] = pd.to_datetime(df['date'],errors='coerce')

# 提取所有唯一的(货币,日期)对,去重后批量拉取汇率
unique_currency_date = df[['currency', 'date']].drop_duplicates()
rate_lookup = {}

for _, row in unique_currency_date.iterrows():
    curr = row['currency']
    req_date = row['date']
    # 加元本身不需要请求汇率,直接赋值1
    if curr == 'CAD':
        rate_lookup[(curr, req_date)] = 1.0
        continue
    # 拉取对应日期对应货币兑加元的汇率
    rate_lookup[(curr, req_date)] = cr.get_rate(curr, 'CAD', req_date)
    # 如果碰到接口限频,解开下面这行注释即可
    # time.sleep(0.1)

# 本地批量映射汇率计算成本,无网络开销
df['cost_cad'] = df.apply(
    lambda x: x['servicecost'] * rate_lookup[(x['currency'], x['date'])],
    axis=1
)
效果说明

按你6.1万条记录、10种货币的规模算,去重后需要请求的汇率组合最多不会超过数据覆盖的自然天数*10,就算覆盖2年时间也就7000多个组合,总耗时会从原方案的8小时压缩到数分钟级别,完全满足使用需求。

内容的提问来源于stack exchange,提问作者Francisco Cortes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 23:57:24