【发布时间】:2017-05-25 15:11:00
【问题描述】:
我是 python 的初学者。我正在尝试使用 python 2.7 获取 csv 文件中两个相邻列之间的差异。
示例输入:
Temperature 20 21 23 27 ...
Smoke Obscuration 0.1 0.3 0.6 0.7 ...
Carbon Dioxide 0.05 0.07 0.08 0.09 ...
......
......
我想计算两个相邻值之间的差异并得到这样的输出:
Temperature 0 1 2 4 ...
Smoke Obscuration 0 0.2 0.3 0.1 ...
Carbon Dioxide 0 0.02 0.01 0.01 ...
......
......
据我所知:
import csv
with open("test1.csv", "rb") as f_in, open("test2.csv", "w") as f_out:
r = csv.reader(f_in)
w = csv.writer(f_out)
for row in r:
for i, v in enumerate(row):
if i > 1:
v = (float(row[i]) - float(row[i-1]))
w.writerow(row)
它给出了一个错误:
ValueError:无法将字符串转换为浮点数:
有人可以帮忙吗?任何指导将不胜感激。
【问题讨论】:
-
这是一个写得很好的问题。为了将来参考,请尝试使用
print语句来调试您的输出 -
这是一个奇怪的 csv 文件。它似乎是空格分隔的(创建阅读器时需要
delimiter=' '),但第一列名称有时本身有空格(例如,“烟雾遮蔽”)。现在,csv 阅读器认为你有 1 个巨大的列(它正在寻找逗号)。但是因为第一列空格的问题,我想你除了csv.reader之外还需要别的东西来破解它。 -
试试 pandas 库。这应该很简单,比如两行代码,三行包括“导入”。
-
@vmg 你试过了吗?没有转义列零空格的问题(部分),这会使大多数解析器感到困惑。
-
也许真正的解决方案是首先修复此文件的来源。如果它是从某个东西导出的,看看你是否可以让那个东西吐出有效的 CSV 数据。如果您是从 excel 复制/粘贴...嗯,这可以解释为什么它看起来如此奇怪。