如何在For循环中将变量作为DataFrame列,关联交易对与收盘价
问题描述
需要将交易对列表中的变量添加到通过追加生成的Pandas DataFrame中,使每组收盘价数据对应到所属交易对。现有代码、当前输出及期望输出如下:
现有代码
symbol = ['EURUSD','USDJPY','USDCHF','USDCAD'] timeframe = mt.TIMEFRAME_M1 date_from = datetime(2023,10,27,16,55) date_to = datetime.now() price = [] for i in symbol: data = mt.copy_rates_range(i,timeframe,date_from,date_to) price.append(data['close']) prices = pd.DataFrame(price) prices
当前输出
0 1 2 3 0 1.05644 1.05654 1.05644 1.05640 1 149.63200 149.60200 149.58400 149.60400 2 0.90209 0.90217 0.90219 0.90238 3 1.38740 1.38726 1.38732 1.38729
期望输出
PAIR 0 1 2 3 0 EURUSD 1.05644 1.05654 1.05644 1.05640 1 USDJPY 149.63200 149.60200 149.58400 149.60400 2 USDCHF 0.90209 0.90217 0.90219 0.90238 3 USDCAD 1.38740 1.38726 1.38732 1.38729
已尝试concat方法和+运算符,未解决问题。
解决方案
提供两种简单实现方式,直接实现交易对与收盘价的对应绑定:
方式一:字典构建法
直接用字典存储交易对和对应收盘价数据,再转换为DataFrame:
symbol = ['EURUSD','USDJPY','USDCHF','USDCAD'] timeframe = mt.TIMEFRAME_M1 date_from = datetime(2023,10,27,16,55) date_to = datetime.now() price_data = [] for pair in symbol: data = mt.copy_rates_range(pair, timeframe, date_from, date_to) # 将交易对和收盘价序列打包为字典 price_data.append({'PAIR': pair, **dict(enumerate(data['close']))}) prices = pd.DataFrame(price_data) prices
方式二:插入列法
基于原代码逻辑,先生成收盘价DataFrame,再插入交易对列:
symbol = ['EURUSD','USDJPY','USDCHF','USDCAD'] timeframe = mt.TIMEFRAME_M1 date_from = datetime(2023,10,27,16,55) date_to = datetime.now() price = [] for i in symbol: data = mt.copy_rates_range(i,timeframe,date_from,date_to) price.append(data['close']) prices = pd.DataFrame(price) # 在第0位插入PAIR列,值为交易对列表 prices.insert(0, 'PAIR', symbol) prices
说明
- 方式一通过字典直接绑定交易对与对应数据,转换为DataFrame后自动匹配列顺序;
- 方式二更贴近原代码逻辑,利用交易对列表与收盘价列表的顺序一致性,直接插入列即可完成对应。
内容的提问来源于stack exchange,提问作者Sioux Gougui
相关产品推荐
相关产品推荐

