如何在Python的CSV文件中打印组中出现的唯一名称

2024-09-30 22:28:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想打印列中的特定名称及其csv数据

例如:

[**Joseph**, 1923, **503**]

[Josephine, 1945, 1301]

[Josephina, 1952, 66]

[**Joseph**, 1999, **3498**]

我只想得到Joseph和第2行的总数,但我还不能使用Panda

该输出应如下所示:

约瑟夫:4001

但是它却显示了所有与Joseph有关的名字,比如Josephine

这是我的代码:

import csv,
import itertools, 
import operator

levelgetter = operator.itemgetter(0)

col2sumgetter =operator.itemgetter(2)

baby_name = input("Enter the first name to analyze: ")

 with open("baby_names.csv", "r") as file:

    reader = csv.reader(file)
    name = lambda row: levelgetter(row)
    sorted_rows = sorted(reader, key=name)   
    for level, group in itertools.groupby(sorted_rows, key=name):
        if baby_name in level:
            total = sum(int(col2sumgetter(row)) for row in group)
            print(level, total)

Tags: csvnameinimportleveloperatorreaderbaby
1条回答
网友
1楼 · 发布于 2024-09-30 22:28:18

假设您有一个csv文件file.csv,就像这样

Joseph, 1923, 503
Josephine, 1945, 1301
Josephina, 1952, 66
Joseph, 1999, 3498

您可以使用以下代码通过csv.DictReader获得所需的内容

import csv

baby_name = input('Enter the first name')

with open('file.csv') as file:
    rows = list(csv.DictReader(file, fieldnames = ['c1', 'c2', 'c3']))

res = {}

for row in rows:
    if row['c1'] == baby_name:
        res[baby_name] = res.get(baby_name, 0) + int(row['c3'])

print(res) # {'Joseph': 4001}

要获得总计,只需执行res.values(),这将打印没有名称的总计

相关问题 更多 >