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

如何用Python、pandas、yfinance自动转货币为USD并修改图例标签

解决方案:股票指数图表优化与货币转换

一、替换图例为易读的指数名称

你可以先创建一个代码-指数名称的映射字典,通过重命名DataFrame的列名,让绘图时自动显示易读的图例名称,不用手动在plt.plot里逐个指定标签。

修改步骤:

  • 定义映射字典,把每个指数代码对应到官方名称
  • 用rename方法修改data['Close']的列名

修改后的核心代码片段:

# 定义指数代码与名称的映射
symbol_names = {
    '^FTSE': 'FTSE 100 Index (UK)',
    '^GDAXI': 'DAX Index (Germany)',
    '^FCHI': 'CAC 40 Index (France)',
    '^STOXX50E': 'Euro Stoxx 50 Index',
    '^N100': 'Euronext 100 Index',
    '^BFX': 'Belgium 20 Index'
}

# 重命名Close列的标签
data['Close'] = data['Close'].rename(columns=symbol_names)

# 绘图时直接用重命名后的列,图例自动显示新名称
plt.figure(figsize=(20,10))
plt.plot(data.index, data['Close'])
plt.xlabel("日期")
plt.ylabel("价格(原货币)")
plt.title("欧洲股指 2000/1/1 - 2023/1/31")
plt.legend()
plt.show()

二、自动转换指数价格为美元

没有现成的一键转换工具,需要手动配置汇率数据来实现自动转换。核心思路是获取对应货币对的历史汇率,将指数价格乘以同期汇率转换为美元。

具体操作:

  1. 获取英镑兑美元(GBPUSD=X)和欧元兑美元(EURUSD=X)的历史汇率数据
  2. 将汇率数据与股指数据按日期对齐
  3. FTSE指数用英镑汇率转换,其他欧元计价的指数用欧元汇率转换

完整整合代码:

from pandas_datareader import data as pdr
import yfinance as yf
import matplotlib.pyplot as plt
from datetime import datetime

yf.pdr_override()
# 股指代码和汇率代码
y_symbols = ['^FTSE', '^GDAXI', '^FCHI', '^STOXX50E','^N100', '^BFX']
fx_symbols = ['GBPUSD=X', 'EURUSD=X']
startdate = datetime(2000,1,1)
enddate = datetime(2023,1,31)

# 获取股指数据
data = pdr.get_data_yahoo(y_symbols, start=startdate, end=enddate)
# 获取汇率数据并填充缺失值
fx_data = pdr.get_data_yahoo(fx_symbols, start=startdate, end=enddate)['Close']
fx_data = fx_data.ffill()

# 定义指数名称映射(添加USD标识)
symbol_names = {
    '^FTSE': 'FTSE 100 Index (USD)',
    '^GDAXI': 'DAX Index (USD)',
    '^FCHI': 'CAC 40 Index (USD)',
    '^STOXX50E': 'Euro Stoxx 50 Index (USD)',
    '^N100': 'Euronext 100 Index (USD)',
    '^BFX': 'Belgium 20 Index (USD)'
}
data['Close'] = data['Close'].rename(columns=symbol_names)

# 转换货币:FTSE用GBPUSD汇率,其余用EURUSD汇率
data_usd = data['Close'].copy()
data_usd['FTSE 100 Index (USD)'] *= fx_data['GBPUSD=X']
# 遍历处理欧元计价指数
euro_indices = list(symbol_names.values())[1:]
for idx in euro_indices:
    data_usd[idx] *= fx_data['EURUSD=X']

# 绘制美元计价的股指图表
plt.figure(figsize=(20,10))
plt.plot(data.index, data_usd)
plt.xlabel("日期")
plt.ylabel("价格(美元)")
plt.title("欧洲股指(美元计价)2000/1/1 - 2023/1/31")
plt.legend()
plt.show()

内容的提问来源于stack exchange,提问作者Freya the Goddess

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 15:01:11