使用Python找出多個Excel文件中缺失數(shù)據(jù)行數(shù)多的文件
本文介紹基于Python語言,針對一個文件夾下大量的Excel表格文件,基于其中每一個文件內、某一列數(shù)據(jù)的特征,對其加以篩選,并將符合要求與不符合要求的文件分別復制到另外兩個新的文件夾中的方法。
首先,我們來明確一下本文的具體需求?,F(xiàn)有一個文件夾,其中有大量的Excel表格文件(在本文中我們就以csv格式的文件為例);如下圖所示。

其中,每一個Excel表格文件都有著如下圖所示的數(shù)據(jù)格式。

如上圖所示,各個文件都有著這樣的問題——有些行的數(shù)據(jù)是無誤的,而有些行,除了第一列,其他列都是0值。因此,我們希望就以第2列為標準,找出含有0值數(shù)量低于或高于某一閾值的表格文件——其中,0值數(shù)量多,肯定不利于我們的分析,我們將其放入一個新的文件夾;而0值數(shù)量少的,我們才可以對這一表格文件加以后續(xù)的分析,我們就將其放入另一個新的文件夾中。因此,計算出每一個表格文件對應的的0值數(shù)量百分比后,我們就進一步將這一Excel表格文件復制到對應的文件夾內。
知道了需求,我們就可以開始代碼的撰寫。其中,本文用到的代碼如下所示。
# -*- 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)
其中,上述代碼是一個篩選并復制文件的函數(shù)。該函數(shù)的目的是根據(jù)給定的閾值將具有不同缺失率的文件從一個文件夾復制到另外兩個文件夾。
在代碼中,filter_copy_files函數(shù)接受四個參數(shù):
original_path:原始文件夾的路徑,其中包含要篩選的.csv文件。useful_path:有用文件的目標文件夾路徑,將滿足閾值要求(也就是0值數(shù)量低于閾值)的文件復制到此處。useless_path:無用文件的目標文件夾路徑,將不滿足閾值要求(也就是0值數(shù)量高于閾值)的文件復制到此處。threshold:閾值,用于確定文件的缺失率是否滿足要求。
函數(shù)首先使用os.listdir獲取原始文件夾中的所有文件名,然后遍歷每個文件名。對于以.csv結尾且為文件的文件,函數(shù)使用pd.read_csv讀取.csv文件,并通過df.iloc[:, 1]獲取第2列的值。
接下來,函數(shù)計算第2列中為零的元素數(shù)量,并通過將其除以列的總長度來計算缺失率。根據(jù)閾值判斷缺失率是否滿足要求。
如果缺失率小于閾值,函數(shù)將文件復制到useful_path目標文件夾中,使用shutil.copy函數(shù)實現(xiàn)復制操作。否則,函數(shù)將文件復制到useless_path文件夾中。
最后,我們調用了filter_copy_files函數(shù),并傳遞了相應的參數(shù)來執(zhí)行文件篩選和復制操作。
運行上述代碼,我們即可在對應的文件夾中看到文件。如下圖所示,0值數(shù)量低于閾值的表格文件都復制到了這個LowMissingRate文件夾中,我們即可對其加以后續(xù)處理;而那些0值數(shù)量高于閾值的表格文件,就放到另一個HighMissingRate文件夾中了。

到此這篇關于使用Python找出多個Excel文件中缺失數(shù)據(jù)行數(shù)多的文件的文章就介紹到這了,更多相關Python找出缺失數(shù)據(jù)行數(shù)多的Excel文件內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python函數(shù)必須先定義,后調用說明(函數(shù)調用函數(shù)例外)
這篇文章主要介紹了Python函數(shù)必須先定義,后調用說明(函數(shù)調用函數(shù)例外),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
python通過nmap掃描在線設備并嘗試AAA登錄(實例代碼)
這篇文章主要介紹了python通過nmap掃描在線設備并嘗試AAA登錄,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12

