Python在多个Excel文件中找出缺失数据行数多的文件

本文介绍基于Python 语言,针对一个文件夹 下大量的Excel 表格文件,基于其中每一个文件 内、某一列数据 的特征,对其加以筛选,并将符合要求不符合要求 的文件分别复制到另外两个新的文件夹 中的方法。

首先,我们来明确一下本文的具体需求。现有一个文件夹,其中有大量的Excel 表格文件(在本文中我们就以csv格式的文件为例);如下图所示。

image

其中,每一个Excel 表格文件都有着如下图所示的数据格式。

Python在多个Excel文件中找出缺失数据行数多的文件

如上图所示,各个文件都有着这样的问题——有些行的数据是无误的,而有些行,除了第一列,其他列都是0值。因此,我们希望就以第2列为标准,找出含有0值数量低于或高于某一阈值 的表格文件——其中,0值数量多,肯定不利于我们的分析,我们将其放入一个新的文件夹;而0值数量少的,我们才可以对这一表格文件加以后续的分析,我们就将其放入另一个新的文件夹中。因此,计算出每一个表格文件对应的的0值数量百分比后,我们就进一步将这一Excel 表格文件复制到对应的文件夹内。

知道了需求,我们就可以开始代码的撰写。其中,本文用到的代码如下所示。

```python
# -*- coding: utf-8 -*-
"""
Created on Tue May 16 20:19:50 2023

@author: fkxxgis
"""

import os
import shutil
import pandas as pd

def filter_copy_files(original_path, useful_path, useless_path, threshold):
    original_all_file = os.listdir(original_path)
    for file in original_all_file:
        path = os.path.join(original_path, file)
        if file.endswith(".csv") and os.path.isfile(path):
            df = pd.read_csv(path)
            column_value = df.iloc[:, 1]
            zero_count = (column_value == 0).sum()
            zero_ratio = zero_count / len(column_value)

            if zero_ratio < threshold:
                new_path = os.path.join(useful_path, file)
                shutil.copy(path, new_path)
            else:
                new_path = os.path.join(useless_path, file)
                shutil.copy(path, new_path)

filter_copy_files("E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/13_AllYearAverage",
                  "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/14_PointSelection/LowMissingRate",
                  "E:/01_Reflectivity/99_Model_Training/00_Data/02_Extract_Data/14_PointSelection/HighMissingRate",
                  0.30)
```

其中,上述代码是一个筛选并复制文件的函数。该函数的目的是根据给定的阈值将具有不同缺失率的文件从一个文件夹复制到另外两个文件夹。

在代码中,filter_copy_files函数接受四个参数:

  • original_path:原始文件夹的路径,其中包含要筛选的.csv文件。
  • useful_path:有用文件的目标文件夹路径,将满足阈值要求(也就是0值数量低于阈值)的文件复制到此处。
  • useless_path:无用文件的目标文件夹路径,将不满足阈值要求(也就是0值数量高于阈值)的文件复制到此处。
  • threshold:阈值,用于确定文件的缺失率是否满足要求。

函数首先使用os.listdir获取原始文件夹中的所有文件名,然后遍历每个文件名。对于以.csv结尾且为文件的文件,函数使用pd.read_csv读取.csv文件,并通过df.iloc[:, 1]获取第2列的值。

接下来,函数计算第2列中为零的元素数量,并通过将其除以列的总长度来计算缺失率。根据阈值判断缺失率是否满足要求。

如果缺失率小于阈值,函数将文件复制到useful_path目标文件夹中,使用shutil.copy函数实现复制操作。否则,函数将文件复制到useless_path文件夹中。

最后,我们调用了filter_copy_files函数,并传递了相应的参数来执行文件筛选和复制操作。

运行上述代码,我们即可在对应的文件夹中看到文件。如下图所示,0值数量低于阈值的表格文件都复制到了这个LowMissingRate文件夹中,我们即可对其加以后续处理;而那些0值数量高于阈值的表格文件,就放到另一个HighMissingRate文件夹中了。

Python在多个Excel文件中找出缺失数据行数多的文件

至此,大功告成。

文章整理自互联网,只做测试使用。发布者:Lomu,转转请注明出处:https://www.it1024doc.com/6026.html

(0)
LomuLomu
上一篇 2025 年 1 月 12 日 下午2:18
下一篇 2025 年 1 月 12 日 下午3:19

相关推荐

  • 【Java】还在死磕算法?懂“堆”与“优先级队列”,代码效率飙升

    欢迎 💛点赞 🌟收藏 💫关注 🏆堆 一、🎯堆的定义 堆的概念 堆是一种特殊的完全二叉树,它通过一维数组顺序存储关键码集合K={k0,k1,k2,…,kn-1},并遵循特定的顺序关系来定义。具体来说,若对于任意节点Ki,都满足Ki = 0; parent–) { siftDown(parent, usedSize); } } public void si…

    2024 年 12 月 27 日
    45100
  • 【深度学习】利用Java DL4J 训练金融投资组合模型

    # 博主简介 我是CSDN博客专家,同时也是历代文学网的总架构师。拥有超过15年的丰富工作经验,我精通Java编程、高并发设计,并且对Springboot和微服务架构有着深入的了解。我熟悉Linux操作系统、ESXI虚拟化技术,以及云原生技术如Docker和Kubernetes。我热衷于探索科技的前沿,将理论知识转化为实际应用,并保持对新技术的持续好奇心。我…

    未分类 2024 年 12 月 27 日
    36500
  • 『玩转Streamlit』–集成定时任务

    学习了Streamlit了之后,可以尝试给自己的命令行小工具加一个简单的界面。 本篇总结了我改造自己的数据采集的工具时的一些经验。 1. 概要 与常规的程序相比,数据采集任务的特点很明显,比如它一般都是I/O密集型程序,涉及大量网络请求或文件读写,耗费的时间比较长;而且往往是按照一定的时间间隔周期性地执行。 这样的程序对交互性要求不高,所以我之前都是用命令行…

    2025 年 1 月 13 日
    46700
  • MySQL 优化利器 SHOW PROFILE 的实现原理

    背景 近期,我遇到了一个技术挑战:通过传输表空间的方式导入一个体积达4GB的表,整个过程耗时13分钟。通过PROFILE工具的分析,我惊讶地发现,大部分时间竟然花费在了System lock阶段。 mysql> set profiling=1; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> al…

    未分类 2024 年 12 月 24 日
    59800
  • 扣子又出新功能,支持一键部署小程序,太强了!!

    大家好,我是R哥。 作为一名程序员和技术博主,我一直关注如何使用工具提升生产力,尤其是在内容创作和应用开发领域。 拿我开发一个微信小程序为例,我需要懂前端、后端、运维 等全栈技术,开发流程和技术栈复杂,我还需要购买云服务器、云数据库 等各种基础设施,资源耗费非常多。 虽然现在有如 Cursor 这样的革命性 AI 开发工具,它突破了传统开发模式的壁垒,非开发…

    2025 年 1 月 11 日
    62200

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信