Pandas多CSV统计唯一值方法
本文详细介绍了如何利用Python Pandas库高效处理多个CSV文件,并统计指定列的唯一值,特别关注列'b'的唯一值数量统计。通过实际案例,展示了如何使用`glob`模块查找文件,`pd.read_csv`读取数据,以及利用`duplicated()`方法识别并计数唯一值,最终生成汇总表格。此外,文章还探讨了如何使用`drop_duplicates()`提取每个文件中首次出现的唯一值行,为数据分析提供更灵活的解决方案。掌握这些技巧,能显著提升处理大量分散CSV文件的数据分析效率,是数据分析师必备技能。

本教程详细介绍了如何使用Python Pandas库高效地处理多个CSV文件,并统计其中指定列(例如列'b')的唯一值数量。文章通过实际示例演示了如何读取文件、识别并计数唯一项,最终生成一份汇总表格。此外,还探讨了如何提取每个文件中首次出现的唯一值行,为数据分析提供灵活的解决方案。
在日常数据分析工作中,我们经常会遇到需要处理大量分散在多个文件中的数据。一个常见的需求是,从一系列结构相似的CSV文件中,提取并统计某个特定列(例如,用户ID、商品SKU等)的唯一值数量。本教程将指导您如何利用Python的Pandas库高效地完成这项任务,并生成一份清晰的汇总报告。
准备工作:生成示例数据
为了更好地演示,我们首先创建一些模拟的CSV文件。这些文件将具有相同的列结构,并包含随机数据。
import numpy as np
import pandas as pd
from glob import glob
import os
# 清理旧的CSV文件,确保每次运行都是新的示例
for f in glob('file_??.csv'):
os.remove(f)
n = 1000 # 每个文件的行数
columns = list('abcde') # 列名
np.random.seed(0) # 设置随机种子以保证结果可复现
# 生成10个CSV文件
for i in range(10):
filename = f'file_{i:02d}.csv'
pd.DataFrame(
np.random.randint(0, 1000, (n, len(columns))), # 生成随机整数数据
columns=columns,
).to_csv(filename, index=False) # 保存为CSV,不包含索引
print("已生成10个示例CSV文件:file_00.csv 到 file_09.csv")上述代码将创建10个名为 file_00.csv 到 file_09.csv 的文件,每个文件包含5列('a'到'e')和1000行随机数据。我们的目标是统计每个文件中列'b'的唯一值数量。
核心任务:统计每个文件的指定列唯一值
现在,我们将实现统计每个CSV文件中列'b'的唯一值数量,并将其汇总到一个Pandas DataFrame中。
1. 文件发现与读取
首先,我们需要找到所有目标CSV文件。glob模块是Python标准库中用于查找符合特定模式的文件路径的强大工具。
# 使用glob查找所有匹配模式的CSV文件
filenames = glob('file_??.csv')
print(f"发现以下文件:{filenames}")glob('file_??.csv') 会匹配所有以 file_ 开头,后面跟任意两个字符,并以 .csv 结尾的文件,例如 file_00.csv, file_01.csv 等。
2. 识别与计数唯一值
对于每个文件,我们将执行以下操作:
- 使用 pd.read_csv() 读取文件内容。
- 利用 duplicated(['b']) 方法识别列'b'中的重复值。该方法返回一个布尔Series,其中 True 表示该行在列'b'上是重复的(即,之前已经出现过相同的值),False 表示是首次出现或唯一值。
- 通过对 ~pd.read_csv(filename).duplicated(['b']) 进行求和,可以统计 False 的数量,这等同于列'b'的唯一值数量。
3. 构建汇总表格
我们可以使用字典推导式遍历所有文件,将文件名作为键,唯一值数量作为值,然后将这个字典转换为Pandas Series,并进一步转换为DataFrame。
# 遍历每个文件,计算列'b'的唯一值数量
distinct_counts = {
filename: (~pd.read_csv(filename).duplicated(['b'])).sum()
for filename in filenames
}
# 将结果转换为Pandas Series,并进一步处理为DataFrame
df_summary = pd.Series(distinct_counts) \
.to_frame('count') \
.rename_axis(index='filename')
print("\n每个文件列'b'的唯一值数量汇总:")
print(df_summary)输出示例:
count filename file_01.csv 645 file_00.csv 613 file_02.csv 617 file_03.csv 626 file_04.csv 623 file_05.csv 644 file_06.csv 615 file_07.csv 628 file_08.csv 645 file_09.csv 636
这份 df_summary DataFrame清晰地展示了每个CSV文件中列'b'的唯一值数量。
扩展应用:提取每个文件的首个唯一值行
除了统计唯一值的数量,有时我们可能还需要获取每个文件中列'b'首次出现时的完整行数据。例如,如果列'b'代表产品ID,我们可能想获取每个产品ID在文件中首次出现时的所有相关信息。
我们可以通过 drop_duplicates() 方法来实现这一目标。结合 pd.concat(),我们可以将所有文件的结果合并成一个大型DataFrame,并保留原始文件的标识。
# 提取每个文件列'b'的首个唯一值行
df_distinct_rows = pd.concat([
pd.read_csv(filename).drop_duplicates(['b'])
for filename in filenames
], keys=filenames) # 使用文件名作为外部索引(MultiIndex)
print("\n每个文件列'b'的首个唯一值行汇总:")
print(df_distinct_rows)输出示例:
a b c d e
file_01.csv 0 689 191 884 615 649
1 24 68 794 820 107
2 566 469 718 157 897
3 206 256 527 417 672
4 765 755 741 197 926
... ... ... ... ... ...
file_09.csv 986 626 622 224 726 274
988 329 900 577 26 221
990 47 800 369 567 11
998 602 198 165 217 682
999 564 982 890 126 450
[6292 rows x 5 columns]这里的 df_distinct_rows 是一个MultiIndex DataFrame,第一层索引是文件名,第二层是原始文件中的行索引。这使得我们可以方便地追溯每条记录的来源文件。
注意事项与性能考量
- 内存管理: 对于非常大的CSV文件,一次性读取所有文件到内存可能会导致内存溢出。在这种情况下,可以考虑使用 pd.read_csv 的 chunksize 参数分块读取,或者使用 Dask 等专门处理大数据集的库。然而,对于本教程中统计唯一值的场景,duplicated() 或 drop_duplicates() 通常需要访问整个列的数据,因此分块读取可能需要更复杂的逻辑来维护全局的唯一性状态。
- 文件路径与模式匹配: glob 模式应准确反映您要处理的文件命名约定。如果文件分布在不同的子目录中,可能需要调整模式或使用 os.walk 进行更复杂的遍历。
- 列名一致性: 确保所有CSV文件都包含您要分析的目标列(例如'b'),并且列名大小写一致。否则,pd.read_csv 可能会报错或返回不正确的结果。
- 数据类型: duplicated() 和 drop_duplicates() 对不同数据类型(字符串、数字、日期等)都能很好地工作,但要确保列的数据类型在文件中是一致的。
总结
本教程演示了如何利用Python的Pandas库高效地处理多个CSV文件,以统计指定列的唯一值数量。通过 glob 模块进行文件发现,结合 pd.read_csv、duplicated() 和 sum(),我们可以轻松地生成一份汇总报告。此外,drop_duplicates() 和 pd.concat() 的组合也为提取每个文件中首次出现的唯一值行提供了强大的解决方案。掌握这些技术将大大提高您在多文件数据处理和分析中的效率。
终于介绍完啦!小伙伴们,这篇关于《Pandas多CSV统计唯一值方法》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布文章相关知识,快来关注吧!
淘宝下单失败怎么办下单失败解决方法
- 上一篇
- 淘宝下单失败怎么办下单失败解决方法
- 下一篇
- 天眼查查看分支机构详细方法
-
- 文章 · python教程 | 33分钟前 |
- Python列表创建技巧全解析
- 283浏览 收藏
-
- 文章 · python教程 | 57分钟前 |
- Python计算文件实际占用空间技巧
- 349浏览 收藏
-
- 文章 · python教程 | 2小时前 |
- OpenCV中OCR技术应用详解
- 204浏览 收藏
-
- 文章 · python教程 | 2小时前 |
- Pandas读取Django表格:协议关键作用
- 401浏览 收藏
-
- 文章 · python教程 | 3小时前 | 身份验证 断点续传 requests库 PythonAPI下载 urllib库
- Python调用API下载文件方法
- 227浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- Windows7安装RtMidi失败解决办法
- 400浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- Python异步任务优化技巧分享
- 327浏览 收藏
-
- 文章 · python教程 | 3小时前 |
- PyCharm图形界面显示问题解决方法
- 124浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- Python自定义异常类怎么创建
- 450浏览 收藏
-
- 文章 · python教程 | 4小时前 |
- Python抓取赛狗数据:指定日期赛道API教程
- 347浏览 收藏
-
- 文章 · python教程 | 5小时前 |
- Python3中datetime常用转换方式有哪些?
- 464浏览 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 543次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 516次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 500次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 485次学习
-
- ChatExcel酷表
- ChatExcel酷表是由北京大学团队打造的Excel聊天机器人,用自然语言操控表格,简化数据处理,告别繁琐操作,提升工作效率!适用于学生、上班族及政府人员。
- 3179次使用
-
- Any绘本
- 探索Any绘本(anypicturebook.com/zh),一款开源免费的AI绘本创作工具,基于Google Gemini与Flux AI模型,让您轻松创作个性化绘本。适用于家庭、教育、创作等多种场景,零门槛,高自由度,技术透明,本地可控。
- 3390次使用
-
- 可赞AI
- 可赞AI,AI驱动的办公可视化智能工具,助您轻松实现文本与可视化元素高效转化。无论是智能文档生成、多格式文本解析,还是一键生成专业图表、脑图、知识卡片,可赞AI都能让信息处理更清晰高效。覆盖数据汇报、会议纪要、内容营销等全场景,大幅提升办公效率,降低专业门槛,是您提升工作效率的得力助手。
- 3418次使用
-
- 星月写作
- 星月写作是国内首款聚焦中文网络小说创作的AI辅助工具,解决网文作者从构思到变现的全流程痛点。AI扫榜、专属模板、全链路适配,助力新人快速上手,资深作者效率倍增。
- 4525次使用
-
- MagicLight
- MagicLight.ai是全球首款叙事驱动型AI动画视频创作平台,专注于解决从故事想法到完整动画的全流程痛点。它通过自研AI模型,保障角色、风格、场景高度一致性,让零动画经验者也能高效产出专业级叙事内容。广泛适用于独立创作者、动画工作室、教育机构及企业营销,助您轻松实现创意落地与商业化。
- 3798次使用
-
- Flask框架安装技巧:让你的开发更高效
- 2024-01-03 501浏览
-
- Django框架中的并发处理技巧
- 2024-01-22 501浏览
-
- 提升Python包下载速度的方法——正确配置pip的国内源
- 2024-01-17 501浏览
-
- Python与C++:哪个编程语言更适合初学者?
- 2024-03-25 501浏览
-
- 品牌建设技巧
- 2024-04-06 501浏览

