2015-06-09 2 views
-1

У меня есть две переменные - animals и food; если я печатаю их, они выглядят какСохранение данных .csv в Python

var1 var2 
pig acorn 
pig acorn 
pig carrot 
pig potato 
pig acorn 
pig carrot 
dog meat 
dog acorn 
dog carrot 
dog potato 
dog carrot 
dog meat 
cat meat 
cat fish 
cat carrot 
cat potato 

и так далее ...

Я хочу, чтобы эти данные будут храниться в новом файле CSV в следующем формате (но не могу понять, как это сделать она):

animals food count 
pig  acorn 15 
pig  carrot 7 
pig  potato 10 
dog  acorn 2 
dog  meat 10 
dog  potato 1 

и так далее ... другими словами, я хочу наблюдение в переменной animals к повторятся ровно столько раз, сколько есть различные типы элементов в переменной food, и место агрегированный балл в новой переменной е. Например, если есть 50 вхождений pig, 30 из которых являются acorn, 10 из которых являются carrot и 10 potato, я хотел бы, чтобы выглядеть следующим образом:

pig acorn 30 
pig carrot 10 
pig potato 10 
+0

Являются ли списки «животных» и «продуктов питания»? – jayelm

+0

Нет, но я хочу сохранить их в виде списков. Или, скорее, как словари. – DeffRoll

+0

Как представляются «животные» и «еда»? Вы говорите, что это переменные Python. – jayelm

ответ

4

Прежде всего - это имеет мало общего с самой CSV. Если вы хотите, чтобы подсчитать значения, как здесь, с использованием словаря является хорошей идеей, так что вам нужно что-то вроде (я предполагаю, что животные и продукты перечислены):

counts = {} 
for animal, food in zip(animals, foods): 
    counts.setdefault((animal, food), 0) 
    counts[(animal, food)] += 1 

После этого цикла вы будете иметь словарь с ключами (кормами для животных, продуктами питания) и значениями, которые являются подсчетами. Таким образом, вы можете написать их в CSV-файл, как:

for ((animal, food), count) in counts.items(): 
    csv_writer.writerow([animal, food, count]) 
+1

Также рассмотрите ['collections.Counter'] (https://docs.python.org/2/library/collections.html#collections.Counter), оптимизированный для подсчета приложений. – jayelm

3

Похоже, что вы не знаете, замечательный Counter класс collections. Вот documentation.

Если вы хотите посчитать свои переменные пары:

c = Counter(zip(var1, var2)) 

для записи результатов, используйте csv библиотеку, как сообщили в zetciu ответ, но помните, что счетчик экземпляров dict.

with open('result.csv', 'wb') as csvfile: 
    csv_writer = csv.writer(csvfile) 
    csv_writer.writerow(["animals", "food", "count"]) 
    for pair,count in c.items(): 
     animal, food = pair 
     csv_writer.writerow([animal, food, count]) 
Смежные вопросы