9.使用pandas去除重復,空行,第一列表頭為空的數據行


# encoding:utf-8

import pandas as pd

class OpenMyXLS():
    def __init__(self, filepath):
        self.filepath = filepath
        self.openxls()

    def openxls(self):
        df = pd.read_excel(self.filepath,sheet_name=None)
        print("所有的sheet名稱:")
        sheetNameList = list(df)
        print(sheetNameList)
        print('獲取sheet數量:')
        sheetNums = len(sheetNameList)
        print(sheetNums)
        print("獲取索引對應的sheet對應的名稱")
        k = 0
        writer = pd.ExcelWriter('../totest81.xlsx')
        while k < len(sheetNameList):
            sheetName = sheetNameList[k]
            print(sheetName)
            df = pd.read_excel(self.filepath, sheet_name=sheetName)
            print("獲取表頭")
            topNames = (df.keys()).values
            print(topNames)
            print("查找是否有81BOM列")
            findArr = self.returnFiindAll(topNames)
            print("整合后的表頭數據")
            print(findArr)

            if findArr:
                print("獲取對應列的所有數據")
                d = self.returnDict(findArr, df)
                todf = pd.DataFrame(d)
                print("刪除空行")
                todf = todf.dropna(how='all')
                print("刪除該列中有nan的行")
                todf = todf.dropna(subset='81BOM')
                todf.to_excel(writer, sheet_name=sheetName, index=False)
            else:
                print("沒有找到想要的列表頭")
            k += 1
        writer.save()
        writer.close()
        print("創建excel OK!!!")

        df = pd.read_excel("../totest81.xlsx", sheet_name=None)
        sheetNameList = list(df)
        print(sheetNameList)
        self.qcfxls('../totest81.xlsx', sheetNameList)

    def qcfxls(self, filepath, sheetNameList):
        writer = pd.ExcelWriter('../totest82.xlsx')
        # 讀取excel中的數據
        j = 0
        while j < len(sheetNameList):
            sheetName = sheetNameList[j]
            data = pd.DataFrame(pd.read_excel(filepath, sheetName))
            # 查看獲取的數據
            #print(data)
            # 查看去除重復行的數據
            no_re_row = data.drop_duplicates()
            print(no_re_row)
            # 將去除重復行的數據輸出到excel表中
            no_re_row.to_excel(writer, sheet_name=sheetName, index=False)
            j +=1
        writer.save()
        writer.close()
        print("去除重復數據OK")

    '''返回插入EXCEL數據的字典形式'''
    def returnDict(self, findArr, df):
        i = 0
        d = {}
        while i < len(findArr):
            allData1 = df.loc[:, findArr[i]].values
            allData1a = self.qukongge(allData1)
            d[findArr[i]] = allData1a
            i += 1
        return d

    '''返回符合要求的表頭'''
    def returnFiindAll(self, topNames):
        findArr = []
        for topName in topNames:
            if topName == '81BOM':
                findArr.append(topName)
                print(findArr)
            if '70 HSG Bin' in topName:
                findArr.append(topName)
                print(findArr)
            if '70 MLB Bin' in topName:
                findArr.append(topName)
                print(findArr)
        return findArr

    '''去取字符串左右空格'''
    def qukongge(self, lieDatas):
        allData_strip = []
        for allData in lieDatas:
            if isinstance(allData, str):
                # print(allData.strip())
                allData_strip.append(allData.strip())
            else:
                # print(allData)
                allData_strip.append(allData)
        return allData_strip


if __name__ == '__main__':
    filepath = '../test81.xlsx'
    oxl = OpenMyXLS(filepath)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM