首页 > 解决方案 > 如何在Python的CSV文件中打印组中出现的唯一名称

问题描述

我想从列中打印一个特定的名称及其在 csv 中的数据。

例如:

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

[Josephine, 1945, 1301]

[Josephina, 1952, 66]

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

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

该输出应如下所示:

约瑟夫:4001

但相反,它显示了约瑟夫的所有名字,比如约瑟夫

这是我的代码:

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)

标签: python

解决方案


假设你有一个file.csv这样的 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}

要得到 total res.values(),那将打印不带名称的 total 。


推荐阅读