Сравнение двух строк в файле csv – Python

Вопрос: Я пытаюсь сравнить две строки в csv. Например: abc, 2, foo, bar, baz abc, 2, bar,baz, band cab, 3, baz,bar, foo cab, 3, baz,bar, foo Есть ли способ csv module или любой модуль в python, чтобы проверить, является ли столбец 1 одинаковым или другим. Например: в первых двух строках мы видим 2 а в

Вопрос:

Я пытаюсь сравнить две строки в csv. Например:

abc, 2, foo, bar, baz abc, 2, bar,baz, band cab, 3, baz,bar, foo cab, 3, baz,bar, foo

Есть ли способ csv module или любой модуль в python, чтобы проверить, является ли столбец 1 одинаковым или другим.

Например: в первых двух строках мы видим 2 а в третьей строке – число 3. есть ли способ найти это

Идея заключается в том, чтобы суммировать значения, соответствующие конкретному значению в column 1

так,

abc, 2, 10,11,12 abc, 2, 7,8,9 cab, 3, 4,5,6 cab, 3, 1,2,3

Я по существу хочу суммировать значения 12+9 так как он имеет тот же столбец 1 и числа 6 and 3 поскольку значение 3 одинаково в столбце 1

Подводя итог, я предполагаю, что могу создать список с

a=list()

добавьте значение в этот список

a.append(float(line[4]))

и используйте numpy для подведения итогов

numpy.sum(a)

Может ли кто-нибудь помочь мне разобраться в питоническом способе найти, являются ли эти два значения одинаковыми.

Лучший ответ:

Что-то вроде этого:

>>> from collections import Counter >>> c = Counter() with open(‘abc’) as f: reader = csv.reader(f, delimiter = ‘,’, skipinitialspace = True) for row in reader: c[row[1]] += int(row[-1]) … >>> c Counter({‘2’: 21, ‘3’: 9})

Чтобы найти столбцы, используйте itertools.groupby:

>>> with open(‘abc’) as f: reader = csv.reader(f, delimiter = ‘,’, skipinitialspace = True) for k,g in groupby(enumerate(reader), key = lambda x:x[1][1]): print k,» was common on the rows :»,»,».join(str(x[0]) for x in g) … 2 was common on the rows : 0,1 3 was common on the rows : 2,3 Ответ №1

Посмотрите на библиотеку pandas, вы можете легко объединить столбцы на основе групп. Например, если у вас есть csv:

col1,col2,col3,col4,col5 abc,2,10,11,12 abc,2,7,8,9 cab,3,4,5,6 cab,3,1,2,3

Вы можете группировать и суммировать на основе значений в col2 только с несколькими строками кода:

import pandas as pd df = pd.DataFrame.from_csv(‘test.csv’) df.groupby(‘col2’).sum()

Что дает вам:

col3 col4 col5 col2 2 17 19 21 3 5 7 9 Ответ №2

Вы можете использовать группу python по функциям http://docs.python.org/2/library/itertools.html#itertools.groupby

from itertools import groupby grouped = groupby(data, lambda x: x[1])

это даст вам данные, сгруппированные по второй колонке. Затем вы можете получить сумму за каждый ключ:

for key, values in grouped: columnSum = sum(map(lambda x: int(x[4]), values))

Оцените статью
Добавить комментарий