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

如何将价格对收益结果写入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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:56:33