所以我有一个csv(https://ufile.io/y4nr9),它被','分开。并包含以下列:' name','幸存''性别'我想找到没有生存的男性百分比并打印统计数据。到目前为止,这是我的代码:
import csv
reader = csv.reader(open('titanic-new_alphabetized.csv'), delimiter= ',')
filtered = filter(lambda p: 'male' == p[3], reader)
dict = []
input('press ENTER to exit')
答案 0 :(得分:0)
您正在使用list
语法创建字典。
你应该使用dict = {}
答案 1 :(得分:0)
您还应该将文件作为变量打开,以便稍后可以轻松关闭它。
或使用with ... as
打开文件。
答案 2 :(得分:0)
您可以尝试此操作,先删除空列表,然后过滤列表以获取百分比:
import csv
reader = csv.reader(open('1.csv'), delimiter=',')
data = filter(lambda p: p, list(reader)) # remove empty list
filtered=filter(lambda p: p[0]=='0' and p[3] == 'male', data)
print(len(filtered)*1.0/len(data))
结果
0.525252525253
答案 3 :(得分:0)
您可以使用csv.DictReader()将您的csv作为dict列表读取(这里我已经将列名称命名为c1,c2 ..因为我确定它们的意义)。
有了这个,你可以使用列表理解来迭代日期并检查男性的条目,并将生存日期列入列表men
现在你可以找到没有生存的男人的平均数(假设'0'表示死亡,'1'表示活着)
import csv
with open('names.csv') as file:
reader = csv.DictReader(file, delimiter= ',',fieldnames=['c1','c2','c3','c4','c5','c6','c7'])
#print reader # [{'c3': 'Abbing, Mr. Anthony', 'c2': '3', 'c1': '0', 'c7': '7.55', 'c6': 'C.A. 5547', 'c5': '42', 'c4': 'male'}, {'c3': '', 'c2': '', 'c1': '', 'c7': '', 'c6': '', 'c5': '', 'c4': ''}, {'c3': 'Abbott, Mr. Rossmore Edward', 'c2': '3', 'c1': '0', 'c7': '20.25', 'c6': 'C.A. 2673', 'c5': '16', 'c4': 'male'}...]
men = [each['c1'] for each in reader if each['c4']=='male']
#print men #['0', '0', '0', '0', '1'...]
print men.count('0')*100/len(men)
input('press ENTER to exit')
答案 4 :(得分:0)
你可以过滤它们并在Python 3中计算这样的统计数据:
import csv
total, survived = 0, 0
with open('titanic-new_alphabetized.csv', newline='') as csvfile:
for row in filter(lambda p: 'male'==p[3], csv.reader(csvfile, delimiter= ',')):
total += 1
if int(row[0]):
survived += 1
print('total: {}, survived: {} ({:.2f}%)'.format(total, survived,
survived/total * 100))
输出:
total: 577, survived: 109 (18.89%)