2017-02-16 28 views
0

Im новый для Python, и мне нужна помощь, чтобы получить результаты опроса. У меня есть CSV-файл, который выглядит следующим образом:Счетчик Python для CSV-файла

Person, Gender, Q1, Q2, Q3 
professor, male, agree, not agree, agree 
professor, male, agree, agree, agree 
professor, female, neutral, not agree, agree 
Professor, female, agree, agree, agree 
student, female, agree, not agree, not agree 
student, female, no answer, not agree, agree 
student, male, no answer, no answer, agree 

Я хочу, чтобы подсчитать, сколько раз разные ответы происходят на человека и пола. Например, Q1: (профессор, мужчина: согласен, 2), (профессор, женщина: согласен 1, нейтральный 1) и так далее. Я попытался это до сих пор:

import csv 
from collections import Counter 
with open('survey.csv') as csvfile: 
    reader = csv.reader(csvfile, delimiter=',', dialect = csv.excel_tab) 
    counts = Counter(map(tuple,reader)) 
    print [row for row in reader if row] 
    print list(csv.reader(csvfile)) 

Но я думаю, потому что у меня есть только строки, я не получаю никакого результата. Более того, я до сих пор не знаю, как получить данные по людям/полу. Большое спасибо!

+1

Это было бы очень легко с помощью ['pandas'] (http://pandas.pydata.org/pandas-docs/stable/10min.html) – Peter9192

ответ

1

Использование pandas вы могли бы сделать что-то вроде:

import pandas as pd 
my_data = pd.read_csv('survey.csv') 
# To summarize the dataframe for everything together: 
print my_data.describe() 
print my_data.sum() 

# To group by gender, etc. 
my_data.groupby('Gender').count() 
+0

Большое спасибо. Это сработало! – Carro

+0

Большое спасибо. Еще есть еще один вопрос. Можно ли использовать Groupby.apply, чтобы получить ответы на все вопросы? Например, если я пишу grouped = data.groupby (['people', 'gender']) ['Q1', 'Q2', ...] или есть ли другой способ сделать это? – Carro

+0

возможно с петлей, которая проходит через каждый вопрос? – Carro

0

Если вы не хотите, чтобы переключиться на панд, что вам нужно сделать немного анализа в строках после их прочтения. Что-то вроде следующего (непроверенного). Это использует объекты Counter, которые ведут себя так же, как обычные dicts, за исключением того, что ссылка на ключ, который еще не существует, создает его автоматически и дает ему значение 0, а не поднимает KeyError.

from collections import Counter 

counters = [] 
for row in reader: 
    for colno,datum in enumerate(row): 
     if colno >= len(counters): # do we have a counter for this column yet? 
      counters.append(Counter()) # if not, add another Counter 
     counters[colno][datum] += 1 

for counter in counters: 
    print(counter) 

Если первая строка файла CSV являются некоторыми заголовками столбцов, вы можете прочитать его заранее, а затем использовать его для аннотирования списка счетчиков. Я оставлю форматирование содержимого счетчиков красиво для вас как упражнение, если сырые дампы объектов-счетчиков считаются слишком уродливыми.

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

  • Нет связанных вопросов^_^