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

如何转换CSV文件中的单位值?Python实现knots转m/s脚本报错求助

问题分析

你原始代码的错误来自以下三点:

  • 索引调用错误:Pandas的DataFrame对象不支持eventtable[row,col]这种直接按位置取值的写法,按整数位置访问单元格需要使用.iloc属性,正确写法为eventtable.iloc[row, col]
  • 计算结果未回存:你只执行了除法运算,没有将计算后的值赋值回原表格的对应位置,所有修改都不会生效
  • 冗余嵌套循环:Pandas原生支持向量化批量运算,不需要手动遍历每个单元格,嵌套循环写法冗余且运行效率远低于向量化操作
解决方案

方案1:Pandas向量化实现(最简写法)

不需要写任何循环,直接批量选中需要转换的列做运算即可:

import pandas as pd

# 读取CSV,skipinitialspace参数自动去掉列名和数值前的多余空格
eventtable = pd.read_csv(r'C:\Temp\test\test_combined.csv', skipinitialspace=True)

# 选中所有行、从第1列(索引为1)开始的所有列,批量做单位转换
eventtable.iloc[:, 1:] = eventtable.iloc[:, 1:] / 0.514444

# 保存结果,index=False避免输出多余的行索引列
eventtable.to_csv(r'C:\Temp\test\test_combined_convert.csv', index=False)

方案2:标准库csv逐行处理(无需加载全量数据到内存)

如果你不想把整个CSV读取为数组/表格结构处理,可以用Python自带的csv模块逐行读取、修改、写入,适合处理超大文件:

import csv

with open(r'C:\Temp\test\test_combined.csv', 'r', encoding='utf-8') as in_f, \
     open(r'C:\Temp\test\test_combined_convert.csv', 'w', encoding='utf-8', newline='') as out_f:
    reader = csv.reader(in_f)
    writer = csv.writer(out_f)
    # 先写入表头行
    header = next(reader)
    writer.writerow(header)
    # 逐行处理数据
    for row in reader:
        # 第一列是编号保持不变,后续列转换单位
        new_row = [row[0]] + [str(float(val)/0.514444) for val in row[1:]]
        writer.writerow(new_row)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 01:45:03