본문 바로가기
Python

Python 데이터 분석을 위한 강력한 도구 Pandas

by ssury94 2025. 1. 22.

Pandas Series 데이터 생성하기

Series란 무엇인가?

Pandas의 Series는 일차원 데이터 구조로, 리스트와 유사하지만, 데이터에 대해 인덱스를 사용할 수 있는 점이 큰 특징입니다. 각 데이터 요소는 고유한 레이블(인덱스)을 가지며, 이를 통해 데이터를 보다 쉽게 관리하고 접근할 수 있습니다.

import pandas as pd

# Series 생성 예시
data = [10, 20, 30, 40]
series = pd.Series(data, index=['a', 'b', 'c', 'd'])
print(series)

출력:

Accessing and Deleting Elements in Pandas Series

레이블과 인덱스를 통한 접근

Series에서는 데이터에 레이블(또는 인덱스)을 사용해 접근할 수 있습니다.

# 레이블을 사용하여 값 가져오기
print(series['b'])  # 20

# 정수형 위치 인덱스를 사용하여 값 가져오기
print(series[1])  # 20

요소 삭제  .drop()

# 요소 삭제
series = series.drop('b')
print(series)

출력:

a    10
c    30
d    40
dtype: int64

 

Pandas DataFrame이란?

DataFrame은 2차원 데이터 구조로, 행(row)과 열(column)로 구성됩니다. 이는 표 형태의 데이터를 저장하고 분석하는 데 적합합니다.

DataFrame 생성 방법

# 딕셔너리 데이터를 사용해 DataFrame 생성
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Los Angeles', 'Chicago']
}

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

출력:

 

직접 DataFrame()메서드로 딕셔너리와 리스트를 사용하여 생성할 수도 있습니다.

df = pd.DataFrame({'Employee ID':[111, 222, 333, 444],
                   'Employee Name':['Chanel', 'Steve', 'Mitch', 'Bird'],
                   'Salary [$/h]':[35, 29, 38, 20],
                   'Years of Experience':[3, 4 ,9, 1]})

 

 

CSV 파일로부터 데이터 가져오기

Pandas를 사용하면 data 폴더 내 CSV 파일의 데이터를 쉽게 읽어올 수 있습니다.

# CSV 파일 읽기
file_path = 'data/sample.csv'
df = pd.read_csv(file_path)
print(df)

인덱스 변경하기

기본적으로 Pandas는 정수형 인덱스를 할당하지만, 사용자 정의 인덱스를 지정할 수도 있습니다.

# 인덱스 변경
new_index = ['store1', 'store2', 'store3']
df.index = new_index
print(df)

출력:

           Name  Age         City
store1    Alice   25     New York
store2      Bob   30  Los Angeles
store3  Charlie   35      Chicago

Pandas DataFrame 데이터 접근 방법

1. 컬럼의 값을 가져오는 방법

컬럼명을 사용해 특정 열의 데이터를 가져올 수 있습니다.

# 단일 컬럼 접근
print(df['Name'])

출력:

store1      Alice
store2        Bob
store3    Charlie
Name: Name, dtype: object

2. 행과 열의 정보로 데이터 가져오기

2-1. 사람이 읽기 쉬운 방식으로 접근하기 (.loc[  ])

# 인덱스와 컬럼명을 사용해 특정 데이터 접근
print(df.loc['store1', 'Age'])  # 25

2-2. 컴퓨터 친화적인 방식으로 접근하기 (.iloc[  ])

# 정수 기반 인덱스와 컬럼 위치를 사용해 특정 데이터 접근
print(df.iloc[0, 1])  # 25

Numpy와의 차이점

Pandas는 데이터에 대해 인덱스와 레이블을 제공하며, 이를 통해 더욱 직관적이고 사람이 읽기 쉬운 방식으로 데이터에 접근할 수 있습니다. 반면, Numpy 배열은 정수형 인덱스만 사용 가능합니다.

 

데이터 정보 확인하기

df.info()를 사용하면 데이터프레임의 인덱스, 컬럼, 데이터 수, 데이터 유형 등의 정보를 확인할 수 있습니다.

print(df.info())

출력 예시:

<class 'pandas.core.frame.DataFrame'>
Index: 3 entries, store1 to store3
Data columns (total 3 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   Name    3 non-null      object
 1   Age     3 non-null      int64
 2   City    3 non-null      object
dtypes: int64(1), object(2)
memory usage: 96.0+ bytes

 

 

 

중복 데이터 처리

중복된 데이터 확인 및 제거

중복된 데이터 확인하기

# 중복된 데이터 추출
print(df['Name'].unique())

중복 데이터 제거

# 중복 제거
unique_values = df['Name'].unique()
print(unique_values)

데이터의 고유값 개수 확인하기

print(df['Name'].nunique())  # 고유값의 개수

 

 

카테고리컬 데이터 (Categorical Data)

카테고리컬 데이터는 제한된 고유값들로 구성된 데이터를 의미합니다. 예를 들어, 성별(남성/여성)이나 도시 이름과 같은 데이터가 이에 해당합니다. Pandas는 카테고리 데이터를 효과적으로 처리하기 위해 Categorical 데이터 타입을 제공합니다.

카테고리 데이터로 변환하기

# 카테고리 데이터 변환
categories = ['New York', 'Los Angeles', 'Chicago']
df['City'] = pd.Categorical(df['City'], categories=categories)
print(df['City'])

출력:

store1       New York
store2    Los Angeles
store3        Chicago
Name: City, dtype: category
Categories (3, object): ['New York', 'Los Angeles', 'Chicago']

카테고리 데이터의 이점

  1. 메모리 사용량 감소: 카테고리 데이터는 문자열 대신 정수로 저장되므로 메모리를 절약할 수 있습니다.
  2. 연산 속도 향상: 고유값이 적은 데이터의 경우 연산이 더 빠르게 수행됩니다.

 

결론 및 활용 팁

Pandas는 데이터 분석을 위해 강력하고 유연한 도구를 제공합니다. Series와 DataFrame을 활용하여 데이터를 생성, 조작, 분석할 수 있으며, 다양한 내장 함수와 메서드로 효율적인 데이터 처리가 가능합니다. 다음은 Pandas를 효과적으로 활용하기 위한 몇 가지 팁입니다:

  1. 인덱스 사용: 데이터를 빠르게 검색하거나 필터링하기 위해 레이블 또는 정수 기반 인덱스를 적극 활용하세요.
  2. 데이터 타입 관리: 데이터의 타입을 적절히 설정하면 메모리를 절약하고 연산 속도를 높일 수 있습니다.
  3. 결측치 처리: 결측치를 다룰 때 fillna() 또는 dropna() 메서드를 사용해 데이터 품질을 유지하세요.
  4. 고급 분석: 그룹화(groupby()), 피벗 테이블(pivot_table()), 시계열 분석 등 고급 기능을 익혀 실무에 활용하세요.

Pandas를 통해 데이터를 탐색하고 처리하며, 분석의 가능성을 확장해보세요!