使用python基于第三列中的值比较csv文件中的两列

时间:2015-03-25 20:19:28

标签: python csv

我在csv文件中有三列

Number    Value      Checked
1111        5           
1234        6          
1111        0          yes
4444        0          yes
5555        8
4444        7

如果选中的字段为“是”,我需要在“数字”列中找到与其关联的数字是否重复。如果是,那么我想要Checked字段显示“是”

示例输出:

Number    Value      Checked
1111        5          yes
1234        6          
1111        0          yes
4444        0          yes
5555        8
4444        7          yes

我正在使用python。这是一个csv文件。 对不起,我是stackoverflow的新手。基本上我正在尝试读取列中总共为0的行。如果它们为0,那么我创建了一个“Checked”列,对于变为null的值,显示“yes”。例如,如果数字“111111”具有值“-8”和“8”,则在执行sumif之后,它将表示0,因此,检查字段将为“是”。但问题是我的代码会在另一行之后读取一行,因此如果有两行的值为“9”和“-9”,则仅对第二行而不是第一行得到0。我希望选中的列为这两行添加“是”。 这是我的代码的一部分:

    edict={}
    if edict.get(newrow[-10],"")=="":  
       edict[newrow[-10]]=newrow[47]
    else:  
       edict[newrow[-10]]=float(newrow[47])+float(edict[newrow[-10]])                            
    newrow[-9]=edict[newrow[-10]]
    if newrow[-9]==0:
       newrow[-11]="Hide"

row-10是字段Number row47是Value 第11行已检查

如果不清楚,请告诉我。

1 个答案:

答案 0 :(得分:0)

ALGO:

  1. csv模块阅读输入CSV文件。
  2. 创建两个变量,info以保存行详细信息,checked_value为已检查的是数字。
  3. 迭代输入文件中的每一行。
  4. info
  5. 中添加行
  6. 检查行是否已选中yes,如果是,请在row[0]列表中附加checked_value号码。
  7. 迭代info字典,如果row[0]列表中有checked_value号,请再次检查每一行,如果更新行显示为yes
  8. 编写新的CSV文件。
  9. -

    代码:

    import csv
    import pprint
    
    input_file = "input1.csv"
    
    with open(input_file, 'rb') as fp:
        root = csv.reader(fp)
        info = {}
        checked_value = []
        for i, row in enumerate(root):
            info[i]  = row
            if row[2]=="yes":
                checked_value.append(row[0])
    
    print "Debug 1: info: "
    pprint.pprint(info)
    
    for i,j in info.items():
        if j[0] in checked_value:
            j[2] = "yes"
    
    print "Debug 2: info: "
    pprint.pprint(info)
    
    
    #- Write file
    with open("output1.csv", 'wb') as fp:
        root = csv.writer(fp, delimiter=',')
        root.writerows(info.values())
    

    输出: 调试语句:

    vivek@vivek:~/Desktop/stackoverflow/anna$ python 6.py 
    Debug 1: info: 
    {0: ['Number', 'Value', 'Checked'],
     1: ['1111', '5', ''],
     2: ['1234', '6', ''],
     3: ['1111', '0', 'yes'],
     4: ['4444', '0', 'yes'],
     5: ['5555', '8', ''],
     6: ['4444', '7', '']}
    Debug 2: info: 
    {0: ['Number', 'Value', 'Checked'],
     1: ['1111', '5', 'yes'],
     2: ['1234', '6', ''],
     3: ['1111', '0', 'yes'],
     4: ['4444', '0', 'yes'],
     5: ['5555', '8', ''],
     6: ['4444', '7', 'yes']}
    

    Output1.csv

    Number,Value,Checked
    1111,5,yes
    1234,6,
    1111,0,yes
    4444,0,yes
    5555,8,
    4444,7,yes