经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » Python » 查看文章
用python字典统计CSV数据
来源:cnblogs  作者:TechSynapse  时间:2024/5/29 9:10:07  对本文有异议

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,内容如下:

  1. Name,Age,Gender
  2. Alice,25,Female
  3. Bob,30,Male
  4. Charlie,25,Male
  5. Alice,26,Female

我们想统计每个年龄(Age)的人数。

  1. import csv
  2. # 初始化一个空字典来存储统计信息
  3. age_counts = {}
  4. # 打开CSV文件并读取数据
  5. with open('data.csv', mode='r', encoding='utf-8') as csv_file:
  6. csv_reader = csv.DictReader(csv_file)
  7. # 跳过表头(如果有)
  8. next(csv_reader, None) # 消耗迭代器中的第一行(即表头)
  9. # 遍历CSV文件的每一行数据
  10. for row in csv_reader:
  11. age = int(row['Age']) # 假设年龄是整数,如果不是则需要相应处理
  12. # 统计每个年龄的人数
  13. if age in age_counts:
  14. age_counts[age] += 1
  15. else:
  16. age_counts[age] = 1
  17. # 输出统计结果
  18. for age, count in age_counts.items():
  19. print(f"Age {age}: {count} people")

运行上述代码,我们将得到以下输出:

  1. Age 25: 2 people
  2. Age 26: 1 people
  3. Age 30: 1 people

这样,我们就使用Python字典成功地统计了CSV数据中的年龄信息。

2.详细的代码示例例子展示

我们展示几个不同的例子,这些例子展示了如何使用Python字典来统计CSV文件中的数据。

2.1统计每个名字的出现次数

假设我们有一个CSV文件names.csv,内容如下:

  1. Name
  2. Alice
  3. Bob
  4. Charlie
  5. Alice
  6. Bob
  7. David

我们想要统计每个名字的出现次数。

  1. import csv
  2. name_counts = {}
  3. with open('names.csv', mode='r', encoding='utf-8') as csv_file:
  4. csv_reader = csv.reader(csv_file)
  5. next(csv_reader, None) # 跳过表头
  6. for row in csv_reader:
  7. name = row[0]
  8. if name in name_counts:
  9. name_counts[name] += 1
  10. else:
  11. name_counts[name] = 1
  12. # 输出统计结果
  13. for name, count in name_counts.items():
  14. print(f"Name {name}: {count} occurrences")

2.2统计每个年龄段的用户数量

假设我们有一个CSV文件users.csv,内容如下:

  1. Name,Age
  2. Alice,25
  3. Bob,32
  4. Charlie,18
  5. David,28
  6. Eve,19

我们想要统计18-24岁、25-30岁、31岁及以上每个年龄段的用户数量。

  1. import csv
  2. age_groups = {
  3. '18-24': 0,
  4. '25-30': 0,
  5. '31+': 0
  6. }
  7. with open('users.csv', mode='r', encoding='utf-8') as csv_file:
  8. csv_reader = csv.DictReader(csv_file)
  9. next(csv_reader, None) # 跳过表头
  10. for row in csv_reader:
  11. age = int(row['Age'])
  12. if 18 <= age <= 24:
  13. age_groups['18-24'] += 1
  14. elif 25 <= age <= 30:
  15. age_groups['25-30'] += 1
  16. else:
  17. age_groups['31+'] += 1
  18. # 输出统计结果
  19. for age_group, count in age_groups.items():
  20. print(f"Age group {age_group}: {count} users")

2.3统计每个性别在每个年龄段的用户数量

假设我们有一个CSV文件users_advanced.csv,内容如下:

  1. Name,Age,Gender
  2. Alice,25,Female
  3. Bob,32,Male
  4. Charlie,18,Male
  5. David,28,Male
  6. Eve,19,Female

我们想要统计每个性别在每个年龄段(18-24岁、25-30岁、31岁及以上)的用户数量。

  1. import csv
  2. age_gender_counts = {
  3. '18-24': {'Male': 0, 'Female': 0},
  4. '25-30': {'Male': 0, 'Female': 0},
  5. '31+': {'Male': 0, 'Female': 0}
  6. }
  7. with open('users_advanced.csv', mode='r', encoding='utf-8') as csv_file:
  8. csv_reader = csv.DictReader(csv_file)
  9. next(csv_reader, None) # 跳过表头
  10. for row in csv_reader:
  11. age = int(row['Age'])
  12. gender = row['Gender']
  13. if 18 <= age <= 24:
  14. age_group = '18-24'
  15. elif 25 <= age <= 30:
  16. age_group = '25-30'
  17. else:
  18. age_group = '31+'
  19. age_gender_counts[age_group][gender] += 1
  20. # 输出统计结果
  21. for age_group, gender_counts in age_gender_counts.items():
  22. print(f"Age group {age_group}:")
  23. for gender, count in gender_counts.items():
  24. print(f" {gender}: {count} users")
  25. print()

3.统计字典的缺点和局限

统计字典(即使用Python字典来存储统计信息)在数据分析和处理中是一种非常有效的方法,但它也有一些潜在的缺点和局限性:

(1)内存占用:字典在内存中存储键值对,当数据量非常大时,它们会占用相当多的内存。这可能会导致程序在内存有限的系统上运行缓慢或崩溃。

(2)稀疏性:如果统计的数据非常稀疏(即许多键在字典中只出现一次或根本不出现),则字典将包含大量的键值对,其中许多值都是1或0。这可能导致内存使用效率低下。

(3)不可排序:字典本身是无序的,尽管在Python 3.7+中插入顺序被保留(但这不应该被用作排序的依据)。如果我们需要按照特定的顺序遍历统计结果,我们可能需要额外的步骤来对字典的键或值进行排序。

(4)并发问题:在多线程或多进程环境中,直接修改字典可能会引发并发问题,如数据竞争和不一致的结果。在这种情况下,我们可能需要使用锁或其他同步机制来保护对字典的访问。

(5)不支持快速范围查询:字典不支持像列表或数组那样的范围查询。如果我们需要查找在某个范围内的所有键或值,我们可能需要遍历整个字典,这可能会很慢。

(6)无法直接进行数学运算:字典本身不支持数学运算(如加法、减法、乘法等)。如果我们需要对统计结果进行数学运算,我们可能需要将字典转换为其他数据结构(如NumPy数组或Pandas DataFrame),或者编写额外的代码来处理字典中的值。

(7)不支持多维索引:字典只能使用单个键来索引值。如果我们需要基于多个键来索引值(例如,在多维数据集中),我们可能需要使用嵌套字典或其他数据结构。

(8)可读性和可维护性:对于复杂的统计任务,使用字典可能会导致代码变得难以阅读和维护。在这种情况下,使用更高级的数据结构或库(如Pandas DataFrame)可能会更合适。

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

原文链接:https://www.cnblogs.com/TS86/p/18218666

 友情链接:直通硅谷  点职佳

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号