python - 如何在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)
解决方案
假设你有一个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 。
推荐阅读
- php - 无法发送邮件,找不到错误
- javascript - 如何在不重复的情况下使用 asyncstorage?
- mysql - Django MySQL - 正确的连接方式
- yaml - 尝试使用 GitHub 操作部署到 Azure
- azure - 在 Azure 门户中哪里可以找到自定义指标
- java - BCryptPasswordEncoder 适用于超过 72 个字节,如何?
- c - 在C中搜索二叉树中的节点
- directus - docker中的Directus无法连接到docker中的mysql数据库
- javascript - 如何在Angular中圆chartjs栏角?
- rust - 如果 `L` 或 `R` 实现它,则为元组 `(L, R)` 实现标记特征