문제 개요
주어진 판다스(Pandas) 시리즈에서 빠져 있는 요소(누락된 값)를 찾아낸 뒤, 누락된 값을 포함한 전체 요소를 하나의 시리즈로 다시 저장하는 프로그램을 파이썬으로 작성해 보겠습니다. 이 기법은 연속적인 숫자 데이터에서 결측 구간을 자동으로 채워야 할 때 유용하게 활용됩니다.
해결 방법
이 문제는 아래 단계를 따라 해결할 수 있습니다.
- 먼저 리스트 데이터를 기반으로 판다스 시리즈(Series)를 정의합니다.
- for 반복문을 사용하여 첫 번째 요소부터 마지막 요소까지의 범위를 순회하면서, 각 값이 시리즈에 존재하는지 조건문(if)으로 확인합니다.
- 범위 안의 모든 값을 리스트에 추가한 뒤, 최종적으로 정렬하고 결과를 출력합니다.
핵심 로직은 다음과 같습니다.
for i in range(data[0], data[length-1]):
if i not in data:
l1.append(i)
else:
l1.append(i)
여기서 range(data[0], data[length-1])는 시리즈의 시작 값부터 마지막 값 직전까지의 숫자를 생성하며, 반복문을 통해 해당 범위의 모든 값을 새로운 리스트 l1에 담게 됩니다. 그 결과 원래 시리즈에 없던 누락된 값까지 함께 포함된 완전한 시퀀스가 만들어집니다.
예제 코드
다음 구현 예제를 통해 더 자세히 이해해 보겠습니다.
import pandas as pd
import numpy as np
l = [1, 2, 3, 6, 7]
l1 = []
data = pd.Series(l)
length = len(data)
for i in range(data[0], data[length-1]):
if i not in data:
l1.append(i)
else:
l1.append(i)
l1.sort()
data = pd.Series(l1)
print(data)
출력 결과
0 1
1 2
2 3
3 4
4 5
5 6
결과 분석
입력 시리즈는 [1, 2, 3, 6, 7]로 4와 5가 누락되어 있었습니다. 위 코드를 실행하면 시작 값 1부터 마지막 값 7 직전까지의 모든 정수가 새 시리즈에 저장되며, 왼쪽 열은 인덱스(0~5), 오른쪽 열은 실제 값(1~6)을 나타냅니다. 그 결과 누락 없이 연속적인 값을 가진 시리즈가 완성됩니다.
참고: 더 간결한 대안
실무에서는 집합(set) 연산을 활용하면 같은 결과를 더 짧은 코드로 얻을 수 있습니다.
s = pd.Series([1, 2, 3, 6, 7])
full_range = set(range(s.min(), s.max() + 1))
result = pd.Series(sorted(full_range - set(s)))
print(result) # 누락된 값만 추출: 4, 5
이처럼 set 차집합을 사용하면 누락된 요소만 손쉽게 찾을 수 있고, 필요에 따라 원본 시리즈와 병합하여 전체 시퀀스를 재구성할 수도 있습니다.