新闻中心

Python Pandas:高效处理多CSV文件并统计指定列唯一值

2025-11-20
浏览次数:
返回列表

Python Pandas:高效处理多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。

小云雀 小云雀

剪映出品的AI视频和图片创作助手

小云雀 1949 查看详情 小云雀
# 遍历每个文件,计算列'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() 的组合也为提取每个文件中首次出现的唯一值行提供了强大的解决方案。掌握这些技术将大大提高您在多文件数据处理和分析中的效率。

以上就是Python Pandas:高效处理多CSV文件并统计指定列唯一值的详细内容,更多请关注其它相关文章!


# 您要  # 厦门网站建设官网  # 家居seo优化策略  # 深圳市seo报价  # 北京网站建设背景  # 天津seo价v加xtdseo  # 有公司帮我推广我的网站  # 福州抖音搜索seo价格  # 网站怎么建设推广  # 东莞网站建设推广厂商  # 常德搜狗seo优化排名  # 都是  # 如何做  # python  # 现时  # 转换为  # 首个  # 遍历  # 多个  # 我们可以  # 首次  # 标准库  # csv文件  # csv  # 工具  # 大数据 


相关栏目: 【 科技资讯46185 】 【 网络学院92790


相关推荐: QQ网页版官方账号入口 QQ网页版网页版登录指南  sublime如何处理大型CSV文件的列对齐_sublime高级表格编辑插件指南  Lar*el用户头像管理:实现图片缩放、存储与旧文件安全删除的最佳实践  CSS Flexbox与媒体查询:实现响应式布局中元素的并排与堆叠  Excel中VLOOKUP的第四个参数是干什么用的_Excel VLOOKUP第四参数作用解析  age动漫网站入口 age动漫官网直接访问入口  韩剧圈正版入口页面_韩剧圈官网登录链接  抖音网页版怎么|直播|_抖音网页版开播操作指南  PHP中SSG-WSG API的AES加密实践:正确使用初始化向量  J*a应用程序首次运行自动创建文件与目录的最佳实践  搜狗浏览器如何使用密码生成器创建强密码 搜狗浏览器内置密码安全工具  德邦快递查询平台 德邦快递物流信息查询入口  uc浏览器网页版入口 uc浏览器网页版最新网址  Golang如何使用buffered channel提高性能_Golang buffered channel优化技巧  PyTorch模型训练准确率不提升:诊断与修复常见指标计算错误  黑猫投诉统一入口官网 消费者权益保护投诉平台  网易大神怎么保存别人动态的图片_网易大神动态图片保存方法  Kafka Streams中基于消息头条件过滤消息的实现指南  WordPress插件开发:正确注册卸载钩子与避免常见陷阱  学习通在线学习平台 学习通网页版直接进入课程中心  生成rdflib自定义SPARQL函数:参数匹配与实践指南  C++的std::forward_list怎么用_C++ STL中单向链表容器的特点与应用  css绝对定位元素脱离父容器怎么办_确保父元素position非static  Golang如何优化内存分配与垃圾回收_Golang内存管理与GC优化实践  蛙漫限时开放最深处链接_蛙漫全站漫画会员同款秒开地址  J*aScript中在Map循环中检测并处理空数组元素  押井守高度称赞《辐射4》:玩了八年都停不下来!  R星幕后开发视频泄露 包含《GTA6》等多款大作  如何使用spryker/configurable-bundles-products-resource-relationship模块解决复杂产品捆绑关系难题  文心一言怎样用插件调度API数据_文心一言用插件调度API数据【API调用】  Fabric模组开发:自定义物品与物品组的现代管理方法  sublime如何优雅地处理行尾空格_sublime自动清理多余空白字符配置  2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示  MAC怎么让Dock栏只显示当前运行的应用_MAC终端命令实现极简Dock栏  多闪网页版在线观看免费入口_多闪官网访问入口  解决深度学习模型训练初期异常高损失与完美验证准确率问题  qq音乐在线播放入口_qq音乐电脑版登录链接  天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南  C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入  漫蛙2漫画入口 漫蛙正版网页漫画直达网址  PPT平滑切换怎么做 PPT炫酷“平滑”切换动画制作教程【必学】  Sublime怎么配置Nim语言环境_Sublime Nim代码高亮与补全  正确连接J*aScript到HTML实现可点击图片与自定义事件处理  移动端XML文件怎么转换成Excel 手机和平板上的解决方案  Win11怎么开启省电模式_Win11电池节电模式自动开启  Promise错误处理:在catch后终止链式then执行的策略  期待已久:小米17 Ultra、小米首款NAS本月登场  消息称三星明年 2 月正式发布 HBM4,与 SK 海力士同台竞技  手机屏幕碎了但能正常使用怎么办 手机外屏碎裂的修复建议  NRF24L01数据传输深度解析:解决大载荷接收异常与分包策略 

搜索