Data Analysis/Data Analysis ?

데이터 분석 도구 : Pandas

js-kkk 2025. 3. 4. 17:36

4. 데이터 분석 도구 : Pandas

4-1. Pandas 시작하기

4-1-1. pandas 개요

💡

pandas는 데이터 분석과 조작을 위해 설계된 파이썬 라이브러리로, 특히 구조화된 데이터(예: 테이블 형태의 데이터) 처리에 강력하다. pandas는 데이터프레임(DataFrame)이라는 구조를 중심으로 빠르고 직관적인 데이터 처리 및 분석을 지원한다.

pandas는 매우 잘 정리된 공식 문서를 제공한다. 문서에는 함수별 설명, 예제, 사용 방법이 모두 포함되어 있다. 공식 문서 링크는 다음과 같다.

https://pandas.pydata.org/docs/

  • pandas의 특장점
    • 복잡한 데이터를 간단하게 조작할 수 있는 고수준의 API를 제공한다.
    • CSV, Excel, SQL 등 다양한 데이터 소스를 지원하여, 불러오거나 저장할 수 있다.
    • 기본적인 통계 연산부터 복잡한 데이터 집계 및 그룹화까지 강력한 분석 도구들을 제공한다.
    • matplotlib 및 seaborn과 같은 시각화 라이브러리와 쉽게 연동 가능하다.

4-1-2. pandas의 설치 및 설정

  • pandas 설치
    • pandas를 설치하는 가장 간단한 방법은 pip 명령어를 사용하는 것이다. 터미널이나 커맨드 라인에서 다음 명령어를 입력하면 설치된다.
pip install pandas
  • conda 사용 시, 다음 명령어로 설치 가능하다.
conda install pandas

 

 

  • 환경 설정
    • 파이썬 스크립트나 주피터 노트북에서 pandas를 사용하는 방법은 다음과 같다.
    • 여기서 pd는 pandas의 별칭으로 자주 사용되며, 코드의 가독성을 높여준다.
import pandas as pd

 

  • 버전 확인
    • pandas 버전을 확인하려면 다음 명령어를 사용하면 된다.
print(pd.__version__)

 

 

4-1-3. 다른 라이브러리와 비교 (NumPy, SQL, Excel)

  • pandas와 NumPy
    • NumPy는 수치 계산을 위한 배열 기반의 라이브러리이고, pandas는 이를 기반으로 더 복잡한 데이터 구조를 다룬다.
    • pandas는 NumPy 배열을 내부적으로 사용하여 더 효율적으로 대규모 데이터를 처리하지만, 데이터 조작이나 분석에 있어 더 높은 수준의 기능을 제공한다.
  • pandas와 SQL
    • SQL은 데이터베이스에서 데이터를 다루는 언어이며, pandas는 로컬 환경에서 데이터를 다룬다.
    • pandas의 DataFrame은 SQL의 테이블과 유사하며, pandas에서는 SQL에서 하는 연산들(선택, 필터링, 조인 등)을 쉽게 수행할 수 있다.
  • pandas와 Excel
    • Excel은 GUI 기반의 스프레드시트 소프트웨어로 데이터 분석에 널리 사용되지만, 대규모 데이터 처리나 자동화에는 한계가 있다.
    • pandas는 Excel에서 할 수 있는 대부분의 기능을 코드로 구현할 수 있으며, 특히 데이터의 크기가 커지면 pandas가 훨씬 효율적이다.

4-2. pandas 데이터 구조

4-2-1. pandas 데이터 구조 개요

💡

pandas는 Series와 DataFrame라고 하는 두 가지 주요 데이터 구조를 제공하며, 이것들은 데이터 조작과 분석에 매우 중요한 역할을 한다.

  • Series: 1차원 배열로, 인덱스를 포함하며 데이터를 저장한다. (데이터에 고유한 인덱스를 부여하여 데이터에 접근할 수 있다.)
  • DataFrame: 2차원 테이블 형식의 데이터 구조로 여러 개의 Series가 모여 테이블을 이루며, 각 컬럼은 동일한 인덱스를 공유한다. (행과 열 모두 인덱스를 통해 접근할 수 있다.)

4-2-2. Series

💡

pandas의 Series는 NumPy의 1차원 배열과 유사하며, 인덱스와 데이터를 함께 저장한다. 데이터는 숫자, 문자열, 불리언, 또는 다른 데이터 타입을 포함할 수 있다.

  • 생성 방법
    • Series는 pd.Series() 함수를 사용하여 생성할 수 있다.
    • 예를 들어, 리스트나 NumPy 배열을 이용해 Series를 만들 수 있다.
import pandas as pd

# 리스트로 Series 생성
s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s)

 

  • 특징
    • 각 데이터는 고유한 인덱스를 가지며, 이를 통해 데이터에 쉽게 접근할 수 있다.
    • dtype은 Series 내부의 데이터 타입을 나타낸다.
  • 데이터 선택
    • Series의 각 값은 인덱스를 이용해 선택할 수 있다.

# 인덱스를 이용한 선택
print(s['b'])  # 20

 

4-2-3. DataFrame

💡

DataFrame은 행(row)과 열(column)로 이루어진 2차원 데이터 구조로, 다양한 데이터 타입을 포함할 수 있다. DataFrame은 엑셀 시트나 SQL 테이블과 유사한 구조를 가지고 있다.

  • 생성 방법
    • DataFrame은 다양한 방법으로 생성할 수 있다. 대표적인 방법으로는 딕셔너리 또는 리스트를 사용하는 방법이 있다.
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}

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

 

  • 특징
    • 각 열(Column)은 고유한 Series로 간주된다.
    • 행과 열에는 각각의 인덱스와 컬럼 라벨이 있어 데이터를 쉽게 선택할 수 있다.
  • 데이터 선택
    • DataFrame에서 특정 열을 선택하려면 열 이름을 사용하면 된다.
# 특정 열 선택
print(df['Name'])
  • 행을 선택하려면 loc나 iloc을 사용할 수 있다.
# 특정 행 선택 (인덱스 기준)
print(df.loc[1])  # 두 번째 행 선택

 

 

4-2-4. Series와 DataFrame의 차이점

  • Series는 1차원 데이터 구조로, 데이터에 고유한 인덱스를 부여하여 데이터에 접근할 수 있다.
  • DataFrame은 2차원 데이터 구조로, 여러 개의 Series가 모여 테이블을 이루며, 행과 열 모두 인덱스를 통해 접근할 수 있다.

4-3. DataFrame 기본 연산

4-3-1. DataFrame에서 데이터 선택 (인덱싱 및 슬라이싱)

  • 열(Column) 선택 : DataFrame에서 특정 열을 선택하려면 열 이름을 사용한다.
import pandas as pd

data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David'],
    'Age': [25, 30, 35, 40],
    'City': ['New York', 'Los Angeles', 'Chicago', 'Houston']
}

df = pd.DataFrame(data)

# 단일 열 선택
print(df['Name'])

 

 

  • 행(Row) 선택 : loc와 iloc을 사용하여 행을 선택할 수 있다.
    • loc: 인덱스나 라벨을 기반으로 선택
    • iloc: 정수 인덱스를 기반으로 선택
# 인덱스를 기반으로 행 선택
print(df.loc[1])  # 두 번째 행
print(df.iloc[2])  # 세 번째 행
  • 조건부 선택 : 특정 조건을 기반으로 데이터를 선택할 수 있다.
# 나이가 30 이상인 행 선택
print(df[df['Age'] >= 30])

 

4-3-2. 행과 열 추가

  • 열 추가 : DataFrame에 새로운 열을 추가하려면 해당 열 이름과 데이터를 할당한다.
# 'Country' 열 추가
df['Country'] = ['USA', 'USA', 'USA', 'USA']
print(df)

 

  • 행 추가 : 새로운 행을 추가하려면 loc를 사용하거나 append() 메서드를 사용할 수 있다.
# 새로운 행 추가 (인덱스 사용)
df.loc[4] = ['Eve', 28, 'San Francisco', 'USA']
print(df)

 

 

4-3-3. 행과 열 삭제

  • 열 삭제 : DataFrame에서 열을 삭제하려면 drop() 메서드를 사용하며, axis=1을 설정한다.
# 'Country' 열 삭제
df = df.drop('Country', axis=1)
print(df)
  • 행 삭제 : 특정 행을 삭제하려면 drop() 메서드를 사용하고, 인덱스를 전달한다.
# 0번째 행 삭제
df = df.drop(0)
print(df)

 

4-3-4. 기초적인 데이터 수정 및 조작

  • 데이터 수정 : 특정 값을 변경하려면 인덱스와 열을 지정하고 값을 할당한다.
# 'Age' 열의 값을 수정
df.loc[1, 'Age'] = 31
print(df)
  • 데이터 타입 변경 : 데이터의 타입을 변경하려면 astype() 메서드를 사용한다.
# 'Age' 열을 float 타입으로 변경
df['Age'] = df['Age'].astype(float)
print(df.dtypes)

 

 

4-3-5. 고급 인덱싱 및 데이터 선택

  1. 조건부 인덱싱
    • 조건부 선택 : 특정 조건을 만족하는 데이터를 선택할 수 있다.
df_filtered = df[df['Age'] >= 30]
print(df_filtered)
  • 복합 조건을 이용한 선택 : 여러 조건을 결합하여 데이터를 필터링할 수 있다.
df_filtered = df[(df['Age'] >= 30) & (df['City'] == 'Chicago')]
print(df_filtered)

 

  2. 다중 인덱스 (MultiIndex)

  • MultiIndex 설정 : 여러 개의 인덱스를 사용하여 데이터를 계층적으로 표현할 수 있다.
arrays = [
    ['Group1', 'Group1', 'Group2', 'Group2'],
    ['Subgroup1', 'Subgroup2', 'Subgroup1', 'Subgroup2']
]
index = pd.MultiIndex.from_arrays(arrays, names=('Group', 'Subgroup'))

data = {'Value': [10, 20, 30, 40]}
df_multi = pd.DataFrame(data, index=index)
print(df_multi)
  • MultiIndex 데이터 선택
# Group1의 데이터 선택
print(df_multi.loc['Group1'])

 

  1. 고급 인덱싱 기법: loc, iloc, at, iat
    • loc[] : 라벨을 기반으로 데이터를 선택한다.
print(df.loc[1, 'Name'])
  •   iloc[] : 정수 인덱스를 사용하여 데이터를 선택한다.         
print(df.iloc[1, 0])
  •  at[] : 단일 값을 빠르게 선택한다.
print(df.at[1, 'Name'])
  •  iat[] : 정수 인덱스를 사용하여 단일 값을 빠르게 선택한다.
print(df.iat[1, 0])

 

 

4-4. 데이터 입출력

4-4-1. 데이터 읽기 (입력)

💡

pandas는 다양한 파일 형식의 데이터를 읽어올 수 있는 기능을 제공한다. 자주 사용하는 데이터 형식은 CSV, Excel, JSON, SQL 등이 있다.

  • CSV 파일 읽기 (read_csv)
    • CSV 파일을 읽어올 때는 read_csv() 함수를 사용한다.
import pandas as pd

# CSV 파일 읽기
df = pd.read_csv('data.csv')
print(df.head())  # 데이터의 상위 5개 행 출력

 

  • 옵션
    • sep: 구분자 지정 (예: sep=',')
    • header: 헤더가 포함된 행 지정 (예: header=0)
    • index_col: 특정 열을 인덱스로 지정 (예: index_col=0)
# 특정 열을 인덱스로 지정하여 CSV 읽기
df = pd.read_csv('data.csv', index_col='ID')

 

  • Excel 파일 읽기 (read_excel)
    • Excel 파일을 읽어올 때는 read_excel()을 사용하며, 여러 시트를 읽어올 수 있다.
# Excel 파일 읽기
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
print(df.head())

 

 

  • 옵션
    • sheet_name: 특정 시트를 지정 (예: 'Sheet1')
    • index_col: 특정 열을 인덱스로 지정