【问题标题】:Python3 comparing row by row values from csvPython3逐行比较来自csv的值
【发布时间】:2015-11-14 14:31:39
【问题描述】:

我用的是python3.5

导入我的 csv 文件后,我想要这些操作: 输入:

ULIM LLIM High Low CLO $RNG U-OCT MID L-OCT
-------------------------------------------

12785 125300 127840 127500 127475 1275 127532 126575 125618

输出:

Dir ULIM LLIM High Low CLO $RNG U-OCT MID L-OCT Test
----------------------------------------------------

S   12785 125300 127840 127500 127475 1275 127532 126575 125618 T

添加两个新列:方向和测试

T= IF CLO 或 U-OCT 到 ULIM 范围或 L-OCT 到 LLIM 范围值内的高或低值 否则没有条目

如果 CLO 高于 MID,则 S= L,如果 CLOS 低于 MID,则 S= S

这是我想学习/需要帮助的:

我不知道如何进行比较部分并将结果添加到新的两列中。 (数组?) 我不知道如何对整个 csv 表执行此操作(循环?)

【问题讨论】:

  • 嗨,El,欢迎来到 Stackoverflow。请以文本而不是图像的形式提供有问题的输入和输出数据。
  • Tahnk 你 Rahul,但这篇文章并不能帮助我解决我的问题。我知道如何导入/保存 csv 文件。我不知道如何获取行中的特定值来进行数学运算。
  • 我想我必须先写行,然后从行中获取值。但是如何获取行中的特定值并对所有行执行此操作?

标签: python csv python-3.x pandas


【解决方案1】:

您可以像这样迭代每一行并从检索到的字典中进行检查:

import csv

output = open('csv_file_out.txt', 'w')
with open('csv_file.txt') as csvfile:
    reader = csv.DictReader(csvfile, delimiter=' ')
    writer = csv.writer(output, delimiter=' ')
    T = False
    S = 'S'
    for i, row in enumerate(reader):
        if i > 0:
            if row['CLO'] > row['MID']:
                S = 'L'
            if row['U-OCT'] <= row['CLO'] <= row['ULIM']:
                T = True

            writer.writerow([S, row['CLO'], row['ULIM'], row['LLIM'], 'T' if T else ''])               

您必须根据需要更新规则。此外,您可以为 writer.writerow() 找到更简洁的方法,但我并不那么熟悉。

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-27
    • 1970-01-01
    相关资源
    最近更新 更多