使用Python找出多個(gè)Excel文件中缺失數(shù)據(jù)行數(shù)多的文件
本文介紹基于Python語言,針對一個(gè)文件夾下大量的Excel表格文件,基于其中每一個(gè)文件內(nèi)、某一列數(shù)據(jù)的特征,對其加以篩選,并將符合要求與不符合要求的文件分別復(fù)制到另外兩個(gè)新的文件夾中的方法。
首先,我們來明確一下本文的具體需求?,F(xiàn)有一個(gè)文件夾,其中有大量的Excel表格文件(在本文中我們就以csv
格式的文件為例);如下圖所示。
其中,每一個(gè)Excel表格文件都有著如下圖所示的數(shù)據(jù)格式。
如上圖所示,各個(gè)文件都有著這樣的問題——有些行的數(shù)據(jù)是無誤的,而有些行,除了第一列,其他列都是0
值。因此,我們希望就以第2
列為標(biāo)準(zhǔn),找出含有0
值數(shù)量低于或高于某一閾值的表格文件——其中,0
值數(shù)量多,肯定不利于我們的分析,我們將其放入一個(gè)新的文件夾;而0
值數(shù)量少的,我們才可以對這一表格文件加以后續(xù)的分析,我們就將其放入另一個(gè)新的文件夾中。因此,計(jì)算出每一個(gè)表格文件對應(yīng)的的0
值數(shù)量百分比后,我們就進(jìn)一步將這一Excel表格文件復(fù)制到對應(yīng)的文件夾內(nèi)。
知道了需求,我們就可以開始代碼的撰寫。其中,本文用到的代碼如下所示。
# -*- 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)
其中,上述代碼是一個(gè)篩選并復(fù)制文件的函數(shù)。該函數(shù)的目的是根據(jù)給定的閾值將具有不同缺失率的文件從一個(gè)文件夾復(fù)制到另外兩個(gè)文件夾。
在代碼中,filter_copy_files
函數(shù)接受四個(gè)參數(shù):
original_path
:原始文件夾的路徑,其中包含要篩選的.csv
文件。useful_path
:有用文件的目標(biāo)文件夾路徑,將滿足閾值要求(也就是0
值數(shù)量低于閾值)的文件復(fù)制到此處。useless_path
:無用文件的目標(biāo)文件夾路徑,將不滿足閾值要求(也就是0
值數(shù)量高于閾值)的文件復(fù)制到此處。threshold
:閾值,用于確定文件的缺失率是否滿足要求。
函數(shù)首先使用os.listdir
獲取原始文件夾中的所有文件名,然后遍歷每個(gè)文件名。對于以.csv
結(jié)尾且為文件的文件,函數(shù)使用pd.read_csv
讀取.csv
文件,并通過df.iloc[:, 1]
獲取第2
列的值。
接下來,函數(shù)計(jì)算第2
列中為零的元素?cái)?shù)量,并通過將其除以列的總長度來計(jì)算缺失率。根據(jù)閾值判斷缺失率是否滿足要求。
如果缺失率小于閾值,函數(shù)將文件復(fù)制到useful_path
目標(biāo)文件夾中,使用shutil.copy
函數(shù)實(shí)現(xiàn)復(fù)制操作。否則,函數(shù)將文件復(fù)制到useless_path
文件夾中。
最后,我們調(diào)用了filter_copy_files
函數(shù),并傳遞了相應(yīng)的參數(shù)來執(zhí)行文件篩選和復(fù)制操作。
運(yùn)行上述代碼,我們即可在對應(yīng)的文件夾中看到文件。如下圖所示,0
值數(shù)量低于閾值的表格文件都復(fù)制到了這個(gè)LowMissingRate
文件夾中,我們即可對其加以后續(xù)處理;而那些0
值數(shù)量高于閾值的表格文件,就放到另一個(gè)HighMissingRate
文件夾中了。
到此這篇關(guān)于使用Python找出多個(gè)Excel文件中缺失數(shù)據(jù)行數(shù)多的文件的文章就介紹到這了,更多相關(guān)Python找出缺失數(shù)據(jù)行數(shù)多的Excel文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python tkinter控件布局項(xiàng)目實(shí)例
這篇文章主要介紹了python tkinter控件布局項(xiàng)目實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11Python函數(shù)必須先定義,后調(diào)用說明(函數(shù)調(diào)用函數(shù)例外)
這篇文章主要介紹了Python函數(shù)必須先定義,后調(diào)用說明(函數(shù)調(diào)用函數(shù)例外),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06python通過nmap掃描在線設(shè)備并嘗試AAA登錄(實(shí)例代碼)
這篇文章主要介紹了python通過nmap掃描在線設(shè)備并嘗試AAA登錄,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-12-12淺談Python在pycharm中的調(diào)試(debug)
今天小編就為大家分享一篇淺談Python在pycharm中的調(diào)試(debug),具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-11-11