使用Python计算CSV文件中多个标题同时包含信息的行数

ybzsozfc  于 2023-10-13  发布在  Python
关注(0)|答案(1)|浏览(72)

我需要计算CSV文件中多个标题同时包含信息的行数,
例如,这是我的CSV文件:

id,gender,name,age
1,M,Kerry Manders,
2,F,Cain Coulton,29
3,,Marcia Bennett,62
4,F,Rachel Werahiko,
5,,Karen Coulton,44
6,M,Sophia Shortcliffe,62
7,M,Files Access,30
8,,,39

是的,CSV中有一些空值,我需要计算多个标题中非空值的行数。例如,我想计算标题中包含“性别”和“姓名”信息的行,
答案是6行。当然,只要告诉它有多少行就行了,不需要输出文件

gender,name
M,Kerry Manders
F,Cain Coulton
F,Rachel Werahiko
M,Sophia Shortcliffe
M,Files Access

当我计算'性别','姓名'和'年龄'时,Python计算四行

gender,name,age
F,Cain Coulton,29
M,Sophia Shortcliffe,62
M,Files Access,30

我试图通过搜索空值来计算包含信息的行,但我不知道如何继续,或者您是否有其他更好的方法

import csv
with open(r"C:\Users\o\Desktop\1.csv",'r',encoding='UTF-8') as load_input:
    with open(r"C:\Users\o\Desktop\2.csv", 'w', newline='',encoding='UTF-8') as out_output:
        ereader = csv.reader(load_input)
        ewriter = csv.writer(out_output)
        eheader = next(ereader)
        ewriter.writerow(eheader)
        for row_list in ereader:
            image_id = str(row_list[2]).strip()
            if '' in image_id:
                ewriter.writerow(row_list)
            elif '' in image_id:
                print()
raogr8fs

raogr8fs1#

您可以将输入CSV读取为一个带有csv.DictReader的dicts序列,并计算所有所需列非空的dicts数量。将计数加1以包括输出的标题行:

import csv
from io import StringIO

load_input = StringIO('''id,gender,name,age
1,M,Kerry Manders,
2,F,Cain Coulton,29
3,,Marcia Bennett,62
4,F,Rachel Werahiko,
5,,Karen Coulton,44
6,M,Sophia Shortcliffe,62
7,M,Files Access,30
8,,,39''')
query = ['gender', 'name', 'age']
print(sum(all(map(row.get, query)) for row in csv.DictReader(load_input)) + 1)

该输出:4
Demo:在线试用!

相关问题