문제: CSV 파일의 데이터 병합
여러 개의 CSV 파일이 주어집니다.
각 파일에는 동일한 구조의 데이터가 포함되어 있으며, 하나의 열은 고유 ID를 가지고 있습니다.
모든 CSV 파일을 병합하여 하나의 CSV 파일로 만들고, 고유 ID를 기준으로 중복된 항목을 제거한 후,
병합된 데이터를 새로운 CSV 파일에 저장하세요.
입력 형식
로그 파일은 다음과 같은 형식을 가집니다.
CSV 파일 경로의 리스트
(예: csv_files = ["data1.csv", "data2.csv", "data3.csv"])
CSV 파일 내용
data1.csv:
id,name,value
1,Alice,100
2,Bob,200
data2.csv:
id,name,value
2,Bob,250
3,Charlie,300
data3.csv:
id,name,value
4,David,400
1,Alice,150
출력 형식
병합된 데이터를 포함하는 새로운 CSV 파일 (예: merged_data.csv)
merged_data.csv:
id,name,value
1,Alice,150
2,Bob,250
3,Charlie,300
4,David,400
코드
- 각 CSV 파일을 읽어 데이터프레임으로 변환합니다.
- 고유 ID를 기준으로 중복된 항목을 제거합니다.
- 최종 병합된 데이터를 새로운 CSV 파일로 저장합니다.
import pandas as pd
def merge_csv_files(csv_files, output_file):
# 데이터프레임으로 변환한 후 리스트에 저장
df_list = [pd.read_csv(file) for file in csv_files]
# 고유 ID를 기준으로 중복제거
merged_df = pd.concat(df_list, ignore_index=True) \
.drop_duplicates(subset='id', keep='last')
# 병한된 데이터를 CSV 파일로 저장
merged_df.to_csv(output_file, index=False)
csv_files = ["data1.csv", "data2.csv", "data3.csv"]
merge_csv_files(csv_files, "merged_data.csv")
풀이
요약
csv파일 내용을 합치고 ID를 기준으로 중복을 제거하는 문제입니다.
- csv파일 merge는 pandas.concat()을 통해 실행
- 중복 제거는 pandas.dup_dulicates()을 통해 실행
데이터프레임을 리스트에 저장시 df_list 값은 아래와 같이 조회할 수 있습니다.
df_list[0]
id name value
1 Alice 100
2 Bob 200
pandas.concat(df_list)
- 여러 dataframe을 하나로 합치는 메서드
pandas.drop_duplicates(subset='id', keep='last')
- 파라미터
- subset: 중복을 판단할 열(컬럼) 또는 열의 리스트를 지정합니다.
- keep: 중복이 발생했을 때 어느 행을 유지할지를 지정합니다.
ㄴ'first': 중복된 행들 중 첫 번째 행을 유지합니다.
ㄴ'last': 중복된 행들 중 마지막 행을 유지합니다.
ㄴFalse: 모든 중복된 행을 제거합니다.
'Programming > CodingTest' 카테고리의 다른 글
[HackerRank] Electronics Shop (전자제품상점) Implementation 문제 (0) | 2024.08.18 |
---|---|
[HackerRank] Sales by Match (양말 판매상) Implementation 문제 (0) | 2024.08.17 |
[Data] 로그 파일에서 에러 분석 문제 (0) | 2024.08.11 |
[Data] 로그 파일 집계 문제 (0) | 2024.08.11 |
[이코테] [5] 다이나믹 프로그래밍 ( 동적계획법 ) (0) | 2024.08.10 |