2015-03-25 3 views
0

У меня есть три столбца в CSV файлСравнение двух столбцов в файле CSV с помощью питона на основе значения в третьем столбце

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

Если проверенное поле «да» мне нужно найти, если номер, связанный с ним повторяется в столбце «Число». Если я хочу Проверил поле, чтобы «да»

Пример вывода:

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

Я использую питон. Это файл csv. Прошу прощения, я новичок в stackoverflow. В основном я пытаюсь прочитать строки в столбце с значениями, равными 0. Если они равны 0, я создал столбец «Проверено», который говорит «да», чтобы значения стали нулевыми. Например, если номер «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" 

рядного 10 является поле Номер row47 является Value строка-11 Проверено

Позвольте мне знать, если это не ясно.

+0

PLE ase format your strings – dm03514

+1

Покажите нам, что вы пробовали до сих пор ... – dursk

+2

Привет, добро пожаловать в StackOverflow! Несколько вопросов: Что вы здесь показываете? Это не файл CSV - я не вижу никаких запятых. С какими проблемами вы сталкиваетесь? Пожалуйста, покажите свой код, чтобы мы могли узнать, как его можно улучшить или исправить.Полагаю, вы не ожидаете, что нам просто напишите эту программу для вас, чтобы вы могли предоставить нам больше информации, чем то, что вы здесь предоставили. Здесь есть несколько хороших указателей: [Написание идеального вопроса] (http://tinyurl.com/so-hints) –

ответ

0

Algo:

  1. Чтение входных CSV-файл с помощью csv модуля.
  2. Создайте две переменные, info, чтобы сохранить данные о строках и checked_value для отмеченных да чисел.
  3. Итерировать каждую строку из входного файла.
  4. Добавить строку в info
  5. Проверьте, если строка проверяется на yes или нет, если да добавить row[0] номер в checked_value списке.
  6. Итератеть info словарь и проверить каждую строку снова, если row[0] номер в checked_value список или нет, если присутствует строка обновления до yes.
  7. Записать новый файл CSV.

-

код:

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()) 

Выход: отладки заявления:

[email protected]:~/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 
+0

Спасибо за код, когда я добавил код, я получаю следующую ошибку: Файл «test.py», строка 343, в exp1 , если j [-10] в checked_value: IndexError: индекс строки вне диапазона –

+0

@ python_rookie1 : Можете ли вы передать мне свой входной файл cvs и код py на мой адрес электронной почты [email protected]? –

+0

Я получил код для работы, спасибо за вашу помощь! –

Смежные вопросы