Pandas는 데이터 분석 및 조작을 위한 강력한 라이브러리로, 특히 DataFrame 객체는 표 형식의 데이터를 다루는 데 매우 유용합니다.

본 포스트에서는 Pandas의 DataFrame에서 자주 사용되는 메서드들을 소개하고자 합니다. 이 메서드들은 데이터의 효율적인 탐색, 선택, 조작, 결측치 처리 및 집계를 가능하게 하여 데이터 분석 작업을 한층 더 수월하게 만들어 줍니다.

Pandas에서 DataFrame은 2차원 데이터 구조로, 행과 열로 구성된 표 형식의 데이터를 저장하고 조작하는 데 사용됩니다.

DataFrame은 다음과 같은 특징을 가지고 있습니다:

  1. 행과 열: DataFrame은 행(row)과 열(column)로 구성되어 있으며, 각 열은 서로 다른 데이터 타입(예: 정수, 실수, 문자열 등)을 가질 수 있습니다.

  2. 인덱스: 각 행은 고유한 인덱스를 가지며, 이를 통해 데이터에 쉽게 접근하고 조작할 수 있습니다. 기본적으로 인덱스는 0부터 시작하는 정수로 설정되지만, 사용자가 지정할 수도 있습니다.

  3. 라벨: 각 열은 이름(라벨)을 가지며, 이를 통해 특정 열에 접근하거나 조작할 수 있습니다.

  4. 다양한 데이터 소스: DataFrame은 CSV 파일, Excel 파일, SQL 데이터베이스 등 다양한 데이터 소스에서 쉽게 생성할 수 있습니다.

  5. 강력한 데이터 조작 기능: Pandas는 데이터 필터링, 정렬, 집계, 결합, 결측치 처리 등 다양한 데이터 조작 기능을 제공합니다.

1. 데이터 생성

다음과 같이 DataFrame을 생성할 수 있습니다:

import pandas as pd

data = {
    '이름': ['Alice', 'Bob', 'Charlie'],
    '나이': [25, 30, 35],
    '도시': ['서울', '부산', '대구']
}

df = pd.DataFrame(data)
print(df)

이 코드는 다음과 같은 DataFrame을 생성합니다:

      이름  나이   도시
0   Alice  25   서울
1     Bob  30   부산
2 Charlie  35   대구

2. 데이터 조회 및 탐색

  • head(n): DataFrame의 처음 n개의 행을 반환합니다. 기본값은 5입니다.

    df.head(3)
    
  • tail(n): DataFrame의 마지막 n개의 행을 반환합니다. 기본값은 5입니다.

    df.tail(3)
    
  • info(): DataFrame의 요약 정보를 제공합니다. 데이터 타입, 결측치 수 등 다양한 정보를 쉽게 확인할 수 있습니다.

    df.info()
    
  • describe(): 수치형 데이터의 통계 요약을 제공합니다. 평균, 표준편차, 최소값, 최대값 등의 값들을 포함하고 있습니다.

    df.describe()
    

3. 데이터 선택 및 필터링

  • loc[]: 라벨 기반 인덱싱을 사용하여 특정 행과 열을 선택합니다.

    df.loc[0]  # 첫 번째 행 선택
    df.loc[:, '이름']  # '이름' 열 선택
    
  • iloc[]: 정수 기반 인덱싱을 사용하여 특정 행과 열을 선택합니다.

    df.iloc[0, 1]  # 첫 번째 행, 두 번째 열의 값 선택
    
  • 조건 필터링: 특정 조건을 만족하는 행을 선택합니다.

    df[df['나이'] > 30]  # 나이가 30보다 큰 행 선택
    
  • AND 조건 (&): Pandas에서 DataFrame에 대해 다중 조건을 사용하여 필터링할 때는 각 조건을 괄호로 묶고, 조건 사이에 비트 연산자 & (AND) 또는 | (OR)를 사용합니다. 조건을 결합할 때는 반드시 괄호를 사용해야 합니다. 예를 들어, 나이가 30보다 크고 도시가 ‘서울’인 행을 선택하고 싶다면 다음과 같이 작성할 수 있습니다:

    df[(df['나이'] > 30) & (df['도시'] == '서울')]
    
  • OR 조건 (|) : 나이가 30보다 크거나 도시가 ‘부산’인 행을 선택하고 싶다면 다음과 같이 작성할 수 있습니다:

    df[(df['나이'] > 30) | (df['도시'] == '부산')]
    
  • 복합 조건: 여러 조건을 조합하여 사용할 수도 있습니다. 예를 들어, 나이가 30보다 크고 도시가 ‘서울’이거나 ‘부산’인 행을 선택하려면 다음과 같이 작성할 수 있습니다:

    df[((df['나이'] > 30) & (df['도시'] == '서울')) | (df['도시'] == '부산')]
    

4. 데이터 조작

  • sort_values(by): 특정 열을 기준으로 DataFrame을 정렬합니다.

    df.sort_values(by='나이', ascending=False)
    
  • drop(labels): 특정 행이나 열을 삭제합니다.

    df.drop(columns='도시')  # '도시' 열 삭제
    
  • rename(columns): 열의 이름을 변경합니다.

    df.rename(columns={'이름': '이름_변경'}, inplace=True)
    

5. 데이터 추가 및 수정

  • assign(): 새로운 열을 추가하거나 기존 열을 수정합니다.

    df = df.assign(성별=['여', '남', '남'])
    
  • append(): 다른 DataFrame을 현재 DataFrame에 추가합니다.

    df2 = pd.DataFrame({'이름': ['David'], '나이': [40], '도시': ['광주']})
    df = df.append(df2, ignore_index=True)
    

6. 결측치 처리

  • isnull(): 결측치가 있는지 확인합니다.

    df.isnull()
    
  • fillna(value): 결측치를 특정 값으로 채웁니다.

    df.fillna(0)
    
  • dropna(): 결측치가 있는 행이나 열을 삭제합니다.

    df.dropna()
    

7. 그룹화 및 집계

  • groupby(by): 특정 열을 기준으로 데이터를 그룹화합니다.

    df.groupby('도시').mean()  # 도시별 평균 나이 계산
    
  • agg(): 그룹화된 데이터에 대해 여러 집계 함수를 적용합니다.

    df.groupby('도시').agg({'나이': ['mean', 'max']})
    

Pandas의 DataFrame은 다양한 데이터 분석 작업에 매우 유용한 메서드들을 제공합니다. 위에서 소개한 메서드를 적절히 활용하면 데이터를 보다 효율적으로 탐색하고 조작할 수 있습니다.