Как удалить дубликаты столбцов в нескольких листах Excel одной книги? - PullRequest
1 голос
/ 16 мая 2019

У меня несколько листов в одной книге Excel с дублированными столбцами на каждом листе. Мне нужно удалить дубликаты и оставить только исходные столбцы.

Я знаю, как отбрасывать дубликаты на листе.

df_sheet_map['> Acute Hospital Bed SLM']
result2=df_sheet_map['> Acute Hospital Bed SLM'].T.drop_duplicates().T

dfList = []
path = 'J:/TestDup' 
newpath = 'J:/TestDup/Test2'

for fn in os.listdir(path):
    file = os.path.join(path, fn)
    if os.path.isfile(file): 
        # Import the excel file and call it xlsx_file 
        xlsx_file = pd.ExcelFile(file) 
        # View the excel files sheet names 
        xlsx_file.sheet_names 
        # Load the xlsx files Data sheet as a dataframe 
        df = xlsx_file.parse('Sheet1',header= None) 
        df_NoHeader = df[2:] 
        data = df_NoHeader 
        # Save individual dataframe
        data.to_excel(os.path.join(newpath, fn))

        dfList.append(data) 

appended_data = pd.concat(dfList)
appended_data.to_excel(os.path.join(newpath, 'master_data.xlsx'))

Приведенный выше код работает. Однако мне нужно пройти все листы. Далее, это показывает, чтобы удалить первые две строки, мне нужно изменить, чтобы удалить дубликаты.

1 Ответ

0 голосов
/ 25 июня 2019
#Transpose all sheets in a workbook.  then delete duplicates. then Transpose back to original file and save all sheets
#Transpose all sheets in the workbook file

    import pyexcel
    import pyexcel_xlsx as pe
    from pyexcel_xlsx import get_data

    book = pyexcel.get_book(file_name="H:/SLM_Final/SLM Indicator template Main to clean.xlsx")
    for sheet in book:
        sheet.transpose()
        pass
    book.save_as("H:/SLM_Final/SLM Indicator template Main to clean.xlsx")

#run excel VB from python

    import win32com.client as win32
    import time
    xl = win32.Dispatch('Excel.Application')
    xl.Visible = 0
    ss = xl.Workbooks.Open('H:/SLM_Final/DeleteDup.xlsm')
    xl.Run("deleteDuplicate") 
    time.sleep(30)
    xl.Quit() 
    time.sleep(30)

#VB syntax to add on excel workbook
'''Sub deleteDuplicate()

    Dim ws As Worksheet
    Dim wkbk1 As Workbook
    Dim w As Long
    Dim lRow As Long
    Dim iCntr As Long
    Set wkbk1 = Workbooks.Open("H:/SLM_Final/SLM Indicator template Main to clean.xlsx")
    'Set wkbk1 = ThisWorkbook

    wkbk1.Activate

    With wkbk1

        For w = 1 To .Worksheets.Count

            With Worksheets(w)

                .UsedRange.RemoveDuplicates Columns:=Array(3, 4), Header:=xlYes

            End With

        Next w

    End With
wkbk1.Save
wkbk1.Close
End Sub''''

#
#Transpose files back to the original shape

    import pyexcel
    import pyexcel_xlsx as pe
    from pyexcel_xlsx import get_data

    book = pyexcel.get_book(file_name="H:/SLM_Final/SLM Indicator template Main to clean.xlsx")
    for sheet in book:
        sheet.transpose()
        #sheet.delete_duplicates(keep=False, inplace=False)
        pass
    book.save_as("H:/SLM_Final/SLM Indicator template Main to clean.xlsx")

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...