如何将价格对收益结果写入CSV?修正Python代码关联错误
解决价格对收益计算与CSV输出问题
针对你遇到的PAIR列内容错误、行间空白行,以及不必要的DataFrame列新增问题,我整理了修正后的代码,同时优化了逻辑避免冗余操作:
import pandas as pd import csv # 读取原始价格数据(注意文件名对应你的prices.csv) df = pd.read_csv("prices.csv") fieldnames = ["PAIR", "RETURNS"] # 打开文件时设置newline=''避免生成空白行 with open('results.csv', 'w', newline='') as f: writer = csv.DictWriter(f, fieldnames=fieldnames) # 先写入CSV表头 writer.writeheader() # 取出所有价格列(跳过第一列Date) price_cols = list(df.columns[1:]) for i, col1 in enumerate(price_cols[:-1]): for col2 in price_cols[i+1:]: # 直接计算首尾时刻的价格比率,无需新增DataFrame列 start_ratio = df[col1].iloc[0] / df[col2].iloc[0] end_ratio = df[col1].iloc[-1] / df[col2].iloc[-1] # 计算总收益变化 total_change = (end_ratio - start_ratio) / start_ratio # 构造正确的行数据 row = {"PAIR": f"{col1}/{col2}", "RETURNS": total_change} writer.writerow(row)
逐个问题的修复说明:
- PAIR列内容错误:原代码把整个DataFrame传给了PAIR字段,现在直接用价格对的名称字符串
f"{col1}/{col2}"填充,完全匹配需求。 - 行间空白行:在
open()函数中添加newline=''参数,解决Python csv模块在Windows环境下写入时自动生成空白行的问题。 - 避免新增冗余列:原代码每次循环都给df新增一列存储价格比率,这完全没必要——我们只需要首尾时刻的比率差值,直接用原始列的首尾值计算即可,既节省内存又简化逻辑。
- 正确写入表头:通过
writer.writeheader()将定义好的表头写入结果文件,保证CSV结构符合要求。
另外注意你原代码里写的是读取price1.csv,但描述的源文件是prices.csv,记得保持文件名一致哦。
内容的提问来源于stack exchange,提问作者jayjey
相关产品推荐
相关产品推荐

