본문 바로가기

공부/판다스(Pandas)

Pandas의 기본 데이터 구조 이해하기/Series와 DataFrame

Pandas는 데이터 분석과 처리를 위한 강력한 라이브러리로, 이 라이브러리에서 가장 중요한 두 가지 데이터 구조는 Series와 DataFrame입니다. 이 두 개념을 제대로 이해하면 Pandas의 다양한 기능을 쉽게 활용할 수 있습니다. 이번 글에서는 Series와 DataFrame을 생성하는 방법과, 데이터를 불러오고 저장하는 방법까지 구체적으로 설명하겠습니다.
 

1. Series와 DataFrame

1-1. Series

Series는 1차원 데이터 구조로, 엑셀의 한 열(column)과 유사한 형태입니다. 각 데이터에 인덱스(index)가 자동으로 부여되며, 인덱스를 통해 데이터를 쉽게 접근할 수 있습니다. Series는 하나의 데이터 타입으로 이루어진 값을 다루는 데 적합합니다.
 

예시 1:

import pandas as pd

# Series 생성 예시
age_series = pd.Series([25, 30, 35], index=['Alice', 'Bob', 'Charlie'])
print(age_series)

 

코드 설명:

  • pd.Series() 함수는 Pandas의 Series 객체를 생성합니다.
  • 리스트 [25, 30, 35]는 각 사람의 나이를 나타내고, index=['Alice', 'Bob', 'Charlie']는 이 값에 해당하는 이름을 인덱스로 설정합니다.
  • 출력 결과는 각 사람의 이름과 나이를 한 줄씩 보여줍니다.

출력 결과:

Alice      25
Bob        30
Charlie    35
dtype: int64

 
Series는 딕셔너리와 유사하지만, 데이터가 순서대로 저장되며 인덱스를 사용하여 개별 데이터를 쉽게 접근할 수 있는 것이 특징입니다. 또한, 데이터 타입을 명시적으로 표시해 주며, dtype 속성에서 확인할 수 있습니다. 여기서 int64는 64비트 정수형 데이터 타입을 의미합니다. 


예시 2:

# 다양한 데이터 타입의 Series 생성
score_series = pd.Series([85.5, 92.3, 88.0], index=['Alice', 'Bob', 'Charlie'])
print(score_series)

# 딕셔너리로부터 Series 생성
age_dict = {'Alice': 25, 'Bob': 30, 'Charlie': 35}
age_series_from_dict = pd.Series(age_dict)
print(age_series_from_dict)

 
출력 결과:

Alice      85.5
Bob        92.3
Charlie    88.0
dtype: float64

Alice      25
Bob        30
Charlie    35
dtype: int64

 
여기서는 실수형 데이터를 포함한 Series와 딕셔너리를 이용해 Series를 생성하는 방법을 보여줍니다. 데이터 타입이 float64로 자동 지정되며, Series는 딕셔너리를 활용해 간편하게 생성할 수 있습니다.
 

1-2. DataFrame

DataFrame은 2차원 데이터 구조로, 여러 개의 Series가 모여 하나의 표(table) 형식을 구성합니다. 각 DataFrame은 행(row)과 열(column)로 구성되며, 엑셀에서 전체 표를 다루는 것과 비슷합니다.

import pandas as pd

# DataFrame 생성 예시
data = {
    '이름': ['Alice', 'Bob', 'Charlie'],
    '나이': [25, 30, 35],
    '점수': [85, 90, 95]
}
df = pd.DataFrame(data)
print(df)

 

코드 설명:

  • data 딕셔너리의 각 키는 DataFrame의 열을 나타내며, 리스트는 각 열의 데이터를 나타냅니다.
  • pd.DataFrame() 함수는 Pandas의 DataFrame 객체를 생성합니다.

출력:

      이름  나이  점수
0  Alice   25   85
1    Bob   30   90
2 Charlie  35   95

 

여러 개의 Series를 모아 하나의 DataFrame을 만들면 데이터를 더 구조적으로 관리할 수 있습니다. 또한, DataFrame은 행과 열에 모두 인덱스를 부여할 수 있어 복잡한 데이터를 다루는 데 매우 유용합니다. 
 

2. DataFrame 생성 방법

DataFrame은 여러 가지 방법으로 생성할 수 있습니다. 그 중에서 자주 사용되는 방법은 딕셔너리와 리스트를 이용하는 방법입니다.

2-1. 딕셔너리를 이용한 DataFrame 생성

딕셔너리를 사용하여 DataFrame을 생성하는 방법은 각 열(column)을 딕셔너리의 키로 설정하고, 값으로 리스트를 할당하는 방식입니다.

import pandas as pd

# 딕셔너리로 DataFrame 생성
data = {
    '제품명': ['노트북', '스마트폰', '태블릿'],
    '가격': [1000, 800, 600],
    '재고': [50, 150, 200]
}
df = pd.DataFrame(data)
print(df)

 

출력 결과:

    제품명   가격   재고
0  노트북  1000   50
1  스마트폰   800  150
2  태블릿   600  200

 

2-2. 리스트를 이용한 DataFrame 생성

리스트를 이용하면 각 리스트가 DataFrame의 한 행(row)을 나타내게 됩니다. 이를 통해 더 직관적인 데이터 입력 방식을 사용할 수 있습니다.

예시:

import pandas as pd

# 리스트로 DataFrame 생성
data = [
    ['노트북', 1000, 50],
    ['스마트폰', 800, 150],
    ['태블릿', 600, 200]
]
df = pd.DataFrame(data, columns=['제품명', '가격', '재고'])
print(df)

 
출력 결과:

    제품명   가격   재고
0  노트북  1000   50
1  스마트폰   800  150
2  태블릿   600  200

 
이처럼 다양한 방법으로 DataFrame을 생성할 수 있습니다.

3. 데이터 로드 및 저장 (CSV, Excel 등)

Pandas는 다양한 파일 형식에서 데이터를 쉽게 불러오고 저장할 수 있는 기능을 제공합니다.

3-1. CSV 파일 불러오기

CSV 파일은 쉼표로 구분된 데이터 형식으로, Pandas에서는 read_csv() 함수를 사용해 쉽게 불러올 수 있습니다.

import pandas as pd

# CSV 파일 불러오기
df = pd.read_csv('example.csv')
print(df)

 
코드 설명:

  • pd.read_csv() 함수는 CSV 파일을 DataFrame으로 불러옵니다.
  • 'example.csv'는 불러올 CSV 파일의 경로입니다.

3-2. CSV 파일로 저장하기

DataFrame을 CSV 파일로 저장할 때는 to_csv() 함수를 사용합니다.

 

예시: 

# CSV 파일로 저장
df.to_csv('output.csv', index=False)

 

코드 설명:

  • to_csv() 함수는 DataFrame을 CSV 파일로 저장합니다.
  • index=False는 DataFrame의 인덱스를 저장하지 않도록 설정합니다.

3-3. Excel 파일 불러오기

Pandas는 Excel 파일도 쉽게 불러올 수 있습니다. 이를 위해 read_excel() 함수를 사용합니다.

 

예시: 

import pandas as pd

# 엑셀 파일 불러오기
df = pd.read_excel('example.xlsx', sheet_name='Sheet1')
print(df)

 

코드 설명:

  • pd.read_excel() 함수는 엑셀 파일을 불러와 DataFrame으로 변환합니다.
  • sheet_name 매개변수는 불러올 엑셀 시트를 지정할 수 있습니다.

3-4. Excel 파일로 저장하기

Excel 파일로 저장할 때는 to_excel() 함수를 사용합니다.

 

예시:

# 엑셀 파일로 저장
df.to_excel('output.xlsx', index=False)

 

코드 설명:

  • to_excel() 함수는 DataFrame을 Excel 파일로 저장합니다.
  • index=False는 인덱스를 저장하지 않도록 설정합니다.

Pandas의 Series DataFrame은 데이터 분석에서 매우 중요한 구조입니다. Series는 1차원 데이터를 처리하는 데 적합하고, DataFrame은 여러 개의 Series를 결합해 2차원 데이터를 관리할 수 있습니다.

 

또한, Pandas를 이용해 CSV와 엑셀 파일 같은 외부 데이터를 쉽게 불러오고 저장할 수 있습니다. 이렇게 다양한 형식의 파일에서 데이터를 읽고, 분석하고, 다시 저장할 수 있는 Pandas의 기능은 매우 강력하며, 데이터 분석 업무에서 자주 활용됩니다.

4. 데이터 탐색 및 처리

Pandas를 사용하면 불러온 데이터를 탐색하고, 필요에 맞게 처리할 수 있는 다양한 기능을 제공합니다. 기본적인 통계 정보 확인, 데이터 필터링, 인덱스 설정 등 유용한 기능들을 활용해 보겠습니다.

4-1. 기본 통계 정보 확인하기

Pandas의 describe() 함수는 데이터프레임의 요약 통계 정보를 제공합니다. 이를 통해 각 열에 대한 평균, 표준 편차, 최소값, 최대값 등의 정보를 한눈에 확인할 수 있습니다.

 

예시: 

import pandas as pd

# DataFrame 생성
data = {
    '제품명': ['노트북', '스마트폰', '태블릿'],
    '가격': [1000, 800, 600],
    '재고': [50, 150, 200]
}
df = pd.DataFrame(data)

# 기본 통계 정보 확인
print(df.describe())

 

출력 결과:

              가격           재고
count     3.000000    3.000000
mean    800.000000  133.333333
std     200.000000   76.376262
min     600.000000   50.000000
25%     700.000000  100.000000
50%     800.000000  150.000000
75%     900.000000  175.000000
max    1000.000000  200.000000

 

코드 설명:

  • describe() 함수는 DataFrame에서 수치형 데이터를 대상으로 요약 통계를 출력합니다. 이를 통해 데이터의 전반적인 분포를 쉽게 파악할 수 있습니다.

4-2. 특정 열 선택 및 필터링

Pandas는 특정 열을 선택하거나 조건을 적용해 데이터를 필터링할 수 있습니다. 예를 들어, '가격'이 800 이상인 제품만 선택해 보겠습니다.

 

예시:

# '가격'이 800 이상인 행 선택
filtered_df = df[df['가격'] >= 800]
print(filtered_df)

 

출력 결과:

    제품명   가격   재고
0  노트북  1000   50
1  스마트폰   800  150

 

코드 설명:

  • df['가격'] >= 800은 '가격'이 800 이상인 조건을 적용한 결과로, 그 조건을 만족하는 행들만 새로운 DataFrame으로 필터링합니다.

4-3. 인덱스 설정 및 재설정

DataFrame의 인덱스를 원하는 열로 설정하거나, 기본 인덱스로 다시 초기화할 수 있습니다.

# '제품명'을 인덱스로 설정
df.set_index('제품명', inplace=True)
print(df)

# 인덱스 재설정 (기본 숫자 인덱스로 돌아감)
df.reset_index(inplace=True)
print(df)

 

출력 결과:

            가격   재고
제품명                 
노트북       1000    50
스마트폰      800   150
태블릿        600   200

    제품명   가격   재고
0  노트북  1000   50
1  스마트폰   800  150
2  태블릿   600  200

 

코드 설명:

  • set_index('제품명')은 '제품명' 열을 인덱스로 설정합니다. 이후 데이터를 다룰 때 인덱스로 '제품명'을 사용할 수 있습니다.
  • reset_index() 함수는 다시 기본 숫자 인덱스로 돌아가며, 인덱스였던 '제품명'이 다시 열로 복구됩니다.

5. 데이터 조작 및 변환

Pandas를 사용하면 데이터를 쉽게 조작하거나 변환할 수 있습니다. 예를 들어, 특정 열의 값을 수정하거나, 열을 추가 및 삭제하는 작업도 간단하게 할 수 있습니다.

5-1. 열 추가하기

새로운 데이터를 추가하는 방법은 매우 간단합니다. 기존 DataFrame에 새로운 열을 추가해보겠습니다.

# '할인율' 열 추가
df['할인율'] = [0.1, 0.2, 0.15]
print(df)

 

출력 결과:

    제품명   가격   재고  할인율
0  노트북  1000   50  0.10
1  스마트폰   800  150  0.20
2  태블릿   600  200  0.15

 

5-2. 열 삭제하기

데이터 분석 과정에서 필요 없는 열을 삭제할 수도 있습니다.

# '재고' 열 삭제
df.drop(columns=['재고'], inplace=True)
print(df)

 

출력 결과:

    제품명   가격  할인율
0  노트북  1000  0.10
1  스마트폰   800  0.20
2  태블릿   600  0.15

 

코드 설명:

  • drop() 함수는 특정 열을 삭제할 수 있습니다. inplace=True로 설정하면 기존 DataFrame에 바로 반영됩니다.

5-3. 열 값 수정하기

열의 값도 쉽게 수정할 수 있습니다. 예를 들어, '할인율'을 모든 제품에 대해 0.05씩 더해 수정해 보겠습니다.

# '할인율' 열의 값 수정
df['할인율'] = df['할인율'] + 0.05
print(df)

 

출력 결과:

    제품명   가격  할인율
0  노트북  1000  0.15
1  스마트폰   800  0.25
2  태블릿   600  0.20

 

이번 글에서는 Pandas의 두 가지 주요 데이터 구조인 Series와 DataFrame을 다루는 방법을 설명했습니다. Series는 1차원 데이터를, DataFrame은 2차원 데이터를 처리하는 데 적합하며, 다양한 데이터 소스에서 데이터를 불러오고 저장할 수 있습니다. 또한 Pandas를 활용해 데이터를 탐색하고, 변환하고, 조작하는 다양한 방법을 살펴보았습니다.

 

Pandas는 데이터 분석에서 필수적인 라이브러리로, 이 글에서 다룬 기본적인 개념들을 익히면 더 복잡한 데이터 처리 작업도 쉽게 수행할 수 있습니다. Pandas의 다른 기능들도 하나씩 익혀보세요!