▪dataframe_to_rows 함수를 사용하여 DataFrame의 데이터를 시트에 작성
▪iter_rows 메서드를 사용하여 시트의 모든 행을 가져오고, seen 집합을 사용하여 중복 데이터를 확인
▪중복이 없는 행은 rows_without_duplicates 리스트에 추가 후 중복 제거된 데이터만 시트에 작성
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from pandas import DataFrame
# Create a new workbook
workbook = Workbook()
# Select the activated workbook
sheet = workbook.active
# Create a dataframe included duplicate data
data = {'Name': ['Alice', 'Bob', 'Alice', 'Charlie', 'Bob', 'Alice'],
'Age': [25, 30, 25, 35, 30, 25],
'City': ['New York', 'Paris', 'London', 'Tokyo', 'Paris', 'New York']}
df = DataFrame(data)
# Write dataframe on sheet
for row in dataframe_to_rows(df, index=False, header=True):
sheet.append(row)
# The process of removing duplicate data
rows = list(sheet.iter_rows(values_only=True))
seen = set()
rows_without_duplicates = []
for row in rows:
if row not in seen:
seen.add(row)
rows_without_duplicates.append(row)
# Reset sheet
sheet.delete_rows(1, sheet.max_row)
# Create deduplicated data on a sheet
for row in rows_without_duplicates:
sheet.append(row)
# save the file
workbook.save('[Exam 01]remove_duplicates_by_row.xlsx')
중복 제거 예제 코드 02 (열 기준)
▪DataFrame을 사용하여 중복 데이터가 있는 테이블을 생성
▪ T를 통해 DataFrame을 전치시키고 duplicated함수를 사용하여 중복 확인
▪ ~로 duplicated에 대한 bool 출력 반전(중복이 아닌 데이터만 처리)
▪중복이 없는 데이터만 시트에 작성
from openpyxl import Workbook
from openpyxl.utils.dataframe import dataframe_to_rows
from pandas import DataFrame
# Create a new workbook
workbook = Workbook()
# Select the activated workbook
sheet = workbook.active
# Create a dataframe included duplicate data
data = {'1st score': [100, 95, 100, 90, 100],
'2nd score': [90, 100, 100, 95, 100],
'3rd score': [100, 95, 100, 90, 100]}
df = DataFrame(data, index=None)
# print for deduplicated values by column
print(df.loc[:, ~df.T.duplicated()])
# Created duplicated data on a sheet
for row in dataframe_to_rows(df.loc[:, ~df.T.duplicated()], index=False, header=True):
sheet.append(row)
# Save the file
workbook.save('[Exam 02]Remove_duplicates_by_column.xlsx')