Python實(shí)現(xiàn)遍歷大量表格文件并篩選出數(shù)據(jù)缺失率低的文件
本文介紹基于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實(shí)現(xiàn)遍歷大量表格文件并篩選出數(shù)據(jù)缺失率低的文件的文章就介紹到這了,更多相關(guān)Python遍歷文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python 解壓、復(fù)制、刪除 文件的實(shí)例代碼
這篇文章主要介紹了python 解壓、復(fù)制、刪除 文件的實(shí)例代碼,代碼簡單易懂非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制
K線圖又稱蠟燭圖,常用說法是“K線”。K線是以每個(gè)分析周期的開盤價(jià)、最高價(jià)、最低價(jià)和收盤價(jià)繪制而成。本文將利用Python+Tkinter實(shí)現(xiàn)股票K線圖的繪制,需要的可以參考一下2022-08-08Django 實(shí)現(xiàn)jwt認(rèn)證的示例
這篇文章主要介紹了Django 實(shí)現(xiàn)jwt 認(rèn)證的示例,幫助大家更好的理解和學(xué)習(xí)使用django,感興趣的朋友可以了解下2021-04-04Python-numpy實(shí)現(xiàn)灰度圖像的分塊和合并方式
今天小編就為大家分享一篇Python-numpy實(shí)現(xiàn)灰度圖像的分塊和合并方式,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-01-01Python實(shí)現(xiàn)自動上傳文件到百度網(wǎng)盤
這篇文章主要為大家詳細(xì)介紹了如何利用Python實(shí)現(xiàn)自動上傳文件到百度網(wǎng)盤功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2023-04-04用Python計(jì)算三角函數(shù)之a(chǎn)cos()方法的使用
這篇文章主要介紹了用Python計(jì)算三角函數(shù)之a(chǎn)cos()方法的使用,是Python學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下2015-05-05Django項(xiàng)目實(shí)戰(zhàn)之用戶頭像上傳與訪問的示例
這篇文章主要介紹了Django項(xiàng)目實(shí)戰(zhàn)之用戶頭像上傳與訪問的示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-04JetBrains PyCharm(Community版本)的下載、安裝和初步使用圖文教程詳解
這篇文章主要介紹了JetBrains PyCharm(Community版本)的下載、安裝和初步使用教程,本文圖文并茂給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)和工作具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2020-03-03