我是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))
但我认为因为我只有字符串,所以我没有得到任何结果。此外,我仍然不知道如何按人/性别获取数据。 非常感谢提前!
答案 0 :(得分: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()
答案 1 :(得分:0)
如果您不想切换到pandas,则需要在阅读后对行进行一些分析。类似于以下内容(未经测试)。这使用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文件的第一行是某些列标题,则可以提前读取它,然后使用它来注释计数器列表。如果计数器对象的原始转储被认为太难看,我会把计数器的内容格式化为你作为练习。