Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬으로 판다스 시리즈에서 누락된 요소를 찾아 전체 요소를 새 시리즈로 저장하는 방법

문제 개요

주어진 판다스(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 차집합을 사용하면 누락된 요소만 손쉽게 찾을 수 있고, 필요에 따라 원본 시리즈와 병합하여 전체 시퀀스를 재구성할 수도 있습니다.