首页 > 编程语言 >用python字典统计CSV数据

用python字典统计CSV数据

时间:2024-05-29 09:31:15浏览次数:25  
标签:csv python age reader 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)可能会更合适。

尽管有这些缺点,但字典在统计和数据处理中仍然是非常有用的工具。它们提供了灵活且高效的方式来存储和检索数据,并且对于许多常见任务来说已经足够了。然而,在设计我们的程序时,我们应该考虑我们的具体需求和环境,并选择最适合我们的数据结构和方法。

标签:csv,python,age,reader,CSV,统计,字典
From: https://blog.csdn.net/m0_72958694/article/details/139275285

相关文章

  • 空转第三节课多样本整合的补充2(python版本)
    作者,EvilGenius大家国庆过得如何了?????如果很开心,不妨分享一下上一篇文章讲过了,对空间转录组进行整合分析,比较CCA和harmony的结果可以发现harmony整合的过程中把正常区域整合在了一起,而CCA在整合的过程把部分正常区域和部分肿瘤区域合并成了一个cluster。CCA对肿瘤区域的聚类......
  • python面向对象
    defydrz():print("引导入座")defdcd():print("递菜单")defdc():print("点餐")defgscscd():print("告诉厨师菜谱")defzc():print("做菜")defyc():print("用餐")defjscf():print(&qu......
  • (免费领源码)Java/Mysql数据库+01012大学生爱心互助代购网站,计算机毕业设计项目推荐上万
    摘 要在网络信息的时代,众多的软件被开发出来,给用户带来了很大的选择余地,而且人们越来越追求更个性的需求。在这种时代背景下,企业只能以用户为导向,按品种分类规划,以产品的持续创新作为企业最重要的竞争手段。系统采用了B/S结构,将所有业务模块采用以浏览器交互的模式,选择My......
  • (免费领源码)Java/Mysql数据库+00895springboot的校园二手书销售平台,计算机毕业设计项目
    本科学生毕业设计校园二手书销售平台设计与实现                院系名称:    计算机科学与技术学院    专业班级:                            学生姓名:                           ......
  • (免费领源码)Java/Mysql数据库+00750基于python的音乐电台推荐系统设计,计算机毕业设计项
    毕业设计(论文)Django音乐电台推荐系统学   院:                           专   业:                           年   级:                           姓   名:   ......
  • (免费领源码)Java/Mysql数据库+00485 个性化音乐推荐系统的设计与实现,计算机毕业设计项
    毕业设计(论文)NodeJS个性化音乐推荐系统学   院:                           专   业:                           年   级:                           姓   名:  ......
  • 《python编程从入门到实践》day41
    #昨日知识点回顾    用户注销、注册,限制访问,新主题关联到当前用户#今日知识点学习第20章设置应用程序的样式并部署20.1设置项目“学习笔记”的样式    20.1.1应用程序django-bootstrap4#settings.py---snip---INSTALLED_APPS=[#我的应......
  • 《python编程从入门到实践》day40
    #昨日知识点回顾    编辑条目及创建用户账户    暂没能解决bug:Theviewlearning_logs.views.edit_entrydidn'treturnanHttpResponseobject.ItreturnedNoneinstead.#今日知识点学习    19.2.5注销        提供让用......
  • 《python编程从入门到实践》day39加更
    #昨日知识点回顾    添加主题、条目#今日知识点学习    19.1.3编辑条目        1.URL模式edit——entry#learning_logs/urls.py---snip---#用于编辑条目的页面path('edit_entry/<int:entry_id>/',views.edit_entry,na......
  • Python网络爬虫的时候json=就是让你少写个json.dumps()
    大家好,我是皮皮。一、前言前几天在Python白银交流群【空翼】问了一个Python网络爬虫的问题,提问截图如下:登录请求地址是这个:二、实现过程这里【甯同学】给了一个提示,如下所示:估计很多小伙伴和我一样会有一个疑问吧,为啥这次要用json=data啊?因为请求头的content-type这里对......