用python字典统计CSV数据
1.用python字典统计CSV数据的步骤和代码示例
为了使用Python字典来统计CSV数据,我们可以使用内置的csv模块来读取CSV文件,并使用字典来存储统计信息。以下是一个详细的步骤和完整的代码示例:
1.1步骤
(1)导入csv模块。
(2)打开CSV文件并读取数据。
(3)初始化一个空字典来存储统计信息。
(4)遍历CSV文件的每一行数据。
(5)对于每一行数据,根据需要选择一列或多列作为键(key),并统计其出现次数(或执行其他类型的统计)。
(6)将统计结果存储在字典中。
(7)关闭CSV文件。
(8)(可选)输出或处理统计结果。
1.2代码示例
假设我们有一个CSV文件data.csv,内容如下:
Name,Age,Gender
Alice,25,Female
Bob,30,Male
Charlie,25,Male
Alice,26,Female
我们想统计每个年龄(Age)的人数。
import csv
# 初始化一个空字典来存储统计信息
age_counts = {}
# 打开CSV文件并读取数据
with open('data.csv', mode='r', encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file)
# 跳过表头(如果有)
next(csv_reader, None) # 消耗迭代器中的第一行(即表头)
# 遍历CSV文件的每一行数据
for row in csv_reader:
age = int(row['Age']) # 假设年龄是整数,如果不是则需要相应处理
# 统计每个年龄的人数
if age in age_counts:
age_counts[age] += 1
else:
age_counts[age] = 1
# 输出统计结果
for age, count in age_counts.items():
print(f"Age {age}: {count} people")
运行上述代码,我们将得到以下输出:
Age 25: 2 people
Age 26: 1 people
Age 30: 1 people
这样,我们就使用Python字典成功地统计了CSV数据中的年龄信息。
2.详细的代码示例例子展示
我们展示几个不同的例子,这些例子展示了如何使用Python字典来统计CSV文件中的数据。
2.1统计每个名字的出现次数
假设我们有一个CSV文件names.csv,内容如下:
Name
Alice
Bob
Charlie
Alice
Bob
David
我们想要统计每个名字的出现次数。
import csv
name_counts = {}
with open('names.csv', mode='r', encoding='utf-8') as csv_file:
csv_reader = csv.reader(csv_file)
next(csv_reader, None) # 跳过表头
for row in csv_reader:
name = row[0]
if name in name_counts:
name_counts[name] += 1
else:
name_counts[name] = 1
# 输出统计结果
for name, count in name_counts.items():
print(f"Name {name}: {count} occurrences")
2.2统计每个年龄段的用户数量
假设我们有一个CSV文件users.csv,内容如下:
Name,Age
Alice,25
Bob,32
Charlie,18
David,28
Eve,19
我们想要统计18-24岁、25-30岁、31岁及以上每个年龄段的用户数量。
import csv
age_groups = {
'18-24': 0,
'25-30': 0,
'31+': 0
}
with open('users.csv', mode='r', encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file)
next(csv_reader, None) # 跳过表头
for row in csv_reader:
age = int(row['Age'])
if 18 <= age <= 24:
age_groups['18-24'] += 1
elif 25 <= age <= 30:
age_groups['25-30'] += 1
else:
age_groups['31+'] += 1
# 输出统计结果
for age_group, count in age_groups.items():
print(f"Age group {age_group}: {count} users")
2.3统计每个性别在每个年龄段的用户数量
假设我们有一个CSV文件users_advanced.csv,内容如下:
Name,Age,Gender
Alice,25,Female
Bob,32,Male
Charlie,18,Male
David,28,Male
Eve,19,Female
我们想要统计每个性别在每个年龄段(18-24岁、25-30岁、31岁及以上)的用户数量。
import csv
age_gender_counts = {
'18-24': {'Male': 0, 'Female': 0},
'25-30': {'Male': 0, 'Female': 0},
'31+': {'Male': 0, 'Female': 0}
}
with open('users_advanced.csv', mode='r', encoding='utf-8') as csv_file:
csv_reader = csv.DictReader(csv_file)
next(csv_reader, None) # 跳过表头
for row in csv_reader:
age = int(row['Age'])
gender = row['Gender']
if 18 <= age <= 24:
age_group = '18-24'
elif 25 <= age <= 30:
age_group = '25-30'
else:
age_group = '31+'
age_gender_counts[age_group][gender] += 1
# 输出统计结果
for age_group, gender_counts in age_gender_counts.items():
print(f"Age group {age_group}:")
for gender, count in gender_counts.items():
print(f" {gender}: {count} users")
print()
3.统计字典的缺点和局限
统计字典(即使用Python字典来存储统计信息)在数据分析和处理中是一种非常有效的方法,但它也有一些潜在的缺点和局限性:
(1)内存占用:字典在内存中存储键值对,当数据量非常大时,它们会占用相当多的内存。这可能会导致程序在内存有限的系统上运行缓慢或崩溃。
(2)稀疏性:如果统计的数据非常稀疏(即许多键在字典中只出现一次或根本不出现),则字典将包含大量的键值对,其中许多值都是1或0。这可能导致内存使用效率低下。
(3)不可排序:字典本身是无序的,尽管在Python 3.7+中插入顺序被保留(但这不应该被用作排序的依据)。如果我们需要按照特定的顺序遍历统计结果,我们可能需要额外的步骤来对字典的键或值进行排序。
(4)并发问题:在多线程或多进程环境中,直接修改字典可能会引发并发问题,如数据竞争和不一致的结果。在这种情况下,我们可能需要使用锁或其他同步机制来保护对字典的访问。
(5)不支持快速范围查询:字典不支持像列表或数组那样的范围查询。如果我们需要查找在某个范围内的所有键或值,我们可能需要遍历整个字典,这可能会很慢。
(6)无法直接进行数学运算:字典本身不支持数学运算(如加法、减法、乘法等)。如果我们需要对统计结果进行数学运算,我们可能需要将字典转换为其他数据结构(如NumPy数组或Pandas DataFrame),或者编写额外的代码来处理字典中的值。
(7)不支持多维索引:字典只能使用单个键来索引值。如果我们需要基于多个键来索引值(例如,在多维数据集中),我们可能需要使用嵌套字典或其他数据结构。
(8)可读性和可维护性:对于复杂的统计任务,使用字典可能会导致代码变得难以阅读和维护。在这种情况下,使用更高级的数据结构或库(如Pandas DataFrame)可能会更合适。
尽管有这些缺点,但字典在统计和数据处理中仍然是非常有用的工具。它们提供了灵活且高效的方式来存储和检索数据,并且对于许多常见任务来说已经足够了。然而,在设计我们的程序时,我们应该考虑我们的具体需求和环境,并选择最适合我们的数据结构和方法。
用python字典统计CSV数据的更多相关文章
- python字典结构化数据
https://www.cnblogs.com/evablogs/p/6692947.html dict: 键-值(key-value)对集合{key:value},查找速度极快,但浪费内存. 1 2 ...
- python加载csv数据
入门机器学习时,一些测试数据是网络上的csv文件.这里总结了两种加载csv文件的方式: 1 通过numpy.urllib2加载 import numpy as np import urllib2 ur ...
- Python 简明教程 --- 12,Python 字典
微信公众号:码农充电站pro 个人主页:https://codeshellme.github.io 代码写的越急,程序跑得越慢. -- Roy Carlson 目录 Python 字典是另一种非常实用 ...
- Python字典使用--词频统计的GUI实现
字典是针对非序列集合而提供的一种数据类型,字典中的数据是无序排列的. 字典的操作 为字典增加一项 dict[key] = value students = {"Z004":&quo ...
- python 处理CSV数据
从CS中导入数据 Python中有一个CSV模块支持读写各种方言格式的CSV文件.方言是很重要的,因为没有一个同意的CSV标准,不同的应用实现CSV的方式略有不同,当看到文件的内容的时候你往往很容易第 ...
- python列表、字典与csv
在日常数据分析时最常打交道的是csv文件和list,dict类型.涉及到的主要需求有: 将一个二重列表[[],[]]写入到csv文件中 从文本文件中读取返回为列表 将一字典写入到csv文件中 从csv ...
- Python基础总结之第十天开始【认识一下python的另一个数据对象-----字典】(新手可相互督促)
看了大家的评论,还是有意外的收货.感谢每个小伙伴的评论与补充. 众人拾柴火焰高~ 今天的笔记是记录python中的数据对象----字典! 前面有讲到list列表和tuple元组的笔记,他们都是一样可以 ...
- 用python实现简单EXCEL数据统计的实例
用python实现简单EXCEL数据统计的实例 下面小编就为大家带来一篇用python实现简单EXCEL数据统计的实例.小编觉得挺不错的,现在就分享给大家,也给大家做个参考.一起跟随小编过来看看吧 任 ...
- 使用 json 模块,使json数据格式与Python字典dict数据格式互相转换,获取数据更加方便
一.定义 JSON 是一种数据格式 使用 javaScript (Java 死鬼破特)对象表示法 二.特点 1.JSON 与 XML格式数据的区别 ====== 两种格式的数据,都是跨语言,跨平台 c ...
- python处理csv数据
import csv #从文件读取 reader = csv.reader(file(srcFilePath,'rb')) for line in reader: #忽略第一行 if reader.l ...
随机推荐
- jenkins 持续集成和交付——gogs安装(外篇)
前言 因为在jenkins 过程中一般需要去处理一些git的东西,为了完整性,填补一下git管理安装,这里使用gogs,因为gogs比较小,我运行的小机器能够承受,当然只适合个人,这里用来做实验,网上 ...
- FPGA技术助手,notepad++ 两个插件
DS的时间很珍贵的 ,尤其是过了32岁以后,一身的病,扛不住996的制度.为了增加速度,只能想办法怎么在fpga工作上面降低时间.你有心思点来点去的GUI的界面.还不如用一个脚本完全做完.notepa ...
- 2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」。 游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值。勇者们有一次机会可以击破一个节点泡
2024-04-17:用go语言,欢迎各位勇者莅临力扣城,本次的挑战游戏名为「力扣泡泡龙」. 游戏的起点是一颗形状如二叉树的泡泡树,其中每个节点的值代表该泡泡的分值.勇者们有一次机会可以击破一个节点泡 ...
- etcd 集群安装
1.环境准备 下载安装包:https://github.com/etcd-io/etcd/releases/ 这里下载的安装包为:etcd-v3.5.9-linux-amd64.tar.gz,即我们当 ...
- javascript现代编程系列教程之五——正零和负零
在JavaScript中,正零(+0)和负零(-0)都代表数值0,它们在大多数情况下是等价的.然而,在某些特定的场景下,正零和负零的行为会有所不同. 除法操作:当0被用作除数时,正零和负零会产生不同的 ...
- JVM简明笔记2:运行时数据区
1 内存布局总体结构 根据 JVM 规范,JVM 内存共分为虚拟机栈(Virtual Machine Stacks).堆(Heap).方法区(Method Area).程序计数器(Program Co ...
- 力扣597(MySQL)-好友申请Ⅰ:总体通过率(简单)
题目: 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ID 以及请求的日期. 此表没有主键,它可能包含重复项.该表包含发送请求的用户的 ID ,接受请求的用户的 ...
- 科普达人丨漫画图解什么是eRDMA?
简介: 绕过CPU,将数据直接从一台计算机的内存传输到另一台计算机,进行网络加速 在一个领先的阿里云数据中心里,数百台服务器(也就是大型的计算机)在疯狂工作和通信,他们正在合力完成一个大型的大数据处理 ...
- Go语言入门分享
简介: Go语言出自Ken Thompson.Rob Pike和Robert Griesemer之手,起源于2007年,并在2009年正式对外发布.Go的主要目标是"兼具Python等动态 ...
- 阿里云日志服务SLS,打造云原生时代智能运维
2021年10月21日,阿里云针对企业运维难题,在云栖大会为大家带来了一场<智能运维论坛>的主题演讲.在会上,阿里云资深技术专家.日志服务技术负责人简志提出"云原生时代,企业业 ...