[Pandas] 데이터 프레임

DU·2024년 9월 27일
1

Python

목록 보기
8/8
post-thumbnail

Pandas의 DataFrame은 2차원 데이터 구조로, 엑셀 스프레드시트처럼 행과 열로 구성된 데이터를 다룰 수 있는 강력한 도구입니다. DataFrame은 다양한 데이터 소스를 불러오거나 생성한 후, 데이터를 분석하고 조작하는 데 유용합니다. 여기서는 DataFrame에 대해 자세히 설명하고, 이를 활용하는 여러 방법을 예제와 함께 소개하겠습니다.

1. DataFrame이란?

DataFrame은 Pandas의 핵심 데이터 구조 중 하나로, 2차원 테이블(표) 형식으로 데이터를 저장합니다. 각 열은 데이터의 특징을 나타내고, 각 행은 개별 데이터를 나타냅니다. DataFrame은 여러 타입의 데이터를 함께 저장할 수 있으며, 인덱스를 통해 행과 열을 참조할 수 있습니다.

예시

import pandas as pd

# 딕셔너리를 사용한 DataFrame 생성
data = {'Name': ['John', 'Anna', 'Peter', 'Linda'],
        'Age': [28, 24, 35, 32],
        'City': ['New York', 'Paris', 'Berlin', 'London']}

df = pd.DataFrame(data)

# DataFrame 출력
print(df)

결과:

    Name  Age      City
0   John   28  New York
1   Anna   24     Paris
2  Peter   35    Berlin
3  Linda   32    London

2. DataFrame 생성 방법

2.1. 딕셔너리를 사용한 생성

딕셔너리로 DataFrame을 생성할 때, 키는 열 이름이 되고, 값은 데이터가 됩니다.

# 딕셔너리로 생성
data = {'Product': ['Phone', 'Tablet', 'Laptop'],
        'Price': [500, 800, 1200],
        'Stock': [50, 30, 20]}

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

2.2. 리스트를 사용한 생성

리스트의 리스트를 사용하여 DataFrame을 생성할 수 있으며, 열 이름을 columns 파라미터로 지정합니다.

# 리스트로 생성
data = [['Alice', 25], ['Bob', 30], ['Charlie', 35]]
df = pd.DataFrame(data, columns=['Name', 'Age'])
print(df)

2.3. Numpy 배열로 생성

Pandas는 Numpy와 호환되므로, Numpy 배열을 이용하여 DataFrame을 만들 수 있습니다.

import numpy as np

# Numpy 배열로 생성
data = np.array([[1, 2, 3], [4, 5, 6]])
df = pd.DataFrame(data, columns=['A', 'B', 'C'])
print(df)

3. DataFrame의 주요 속성

DataFrame은 여러 유용한 속성을 제공하여 데이터에 대한 정보를 쉽게 확인할 수 있습니다.

  • df.shape: DataFrame의 행과 열 개수를 튜플 형태로 반환합니다.
  • df.columns: 열 이름을 반환합니다.
  • df.index: 행 인덱스를 반환합니다.
  • df.dtypes: 각 열의 데이터 타입을 반환합니다.
  • df.head(): 처음 5개 행을 반환합니다.
  • df.tail(): 마지막 5개 행을 반환합니다.

예시

print(df.shape)     # (4, 3)
print(df.columns)   # Index(['Name', 'Age', 'City'], dtype='object')
print(df.dtypes)    # 각 열의 데이터 타입 출력

4. DataFrame 데이터 접근 및 조작

4.1. 열 단위 접근

열을 선택할 때는 열 이름을 대괄호 [] 안에 입력하여 접근할 수 있습니다.

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

4.2. 행 단위 접근

행을 선택할 때는 iloc[]loc[]를 사용합니다.

  • iloc[]: 정수 기반 인덱싱
  • loc[]: 라벨 기반 인덱싱
# 첫 번째 행 선택 (정수 인덱스)
print(df.iloc[0])

# 'John'이 있는 행 선택 (라벨 인덱스)
print(df.loc[df['Name'] == 'John'])

4.3. 새로운 열 추가

새로운 열을 쉽게 추가할 수 있습니다.

# 'Country'라는 새 열 추가
df['Country'] = ['USA', 'France', 'Germany', 'UK']
print(df)

4.4. 데이터 필터링

조건을 이용해 데이터를 필터링할 수 있습니다.

# 나이가 30 이상인 사람들만 필터링
filtered_df = df[df['Age'] >= 30]
print(filtered_df)

4.5. 데이터 정렬

특정 열을 기준으로 데이터를 정렬할 수 있습니다.

# 나이를 기준으로 오름차순 정렬
sorted_df = df.sort_values(by='Age')
print(sorted_df)

5. 데이터 조작 (기본 연산)

Pandas는 데이터를 조작하는 여러 기본 기능을 제공합니다.

5.1. 통계 연산

Pandas는 기본적인 통계 기능을 제공하며, 각 열에 대해 계산할 수 있습니다.

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

# 특정 열의 평균
print(df['Age'].mean())

5.2. 결측치 처리

결측치(NaN)를 처리하는 방법도 제공합니다.

# 결측치가 있는 행 삭제
df_cleaned = df.dropna()

# 결측치를 특정 값으로 대체
df_filled = df.fillna(0)

6. DataFrame 병합 및 연결

6.1. 행/열 연결

concat() 함수를 사용하여 여러 DataFrame을 연결할 수 있습니다.

# 두 DataFrame을 행 단위로 연결
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
df_concat = pd.concat([df1, df2])
print(df_concat)

6.2. 병합(Join)

두 개 이상의 DataFrame을 특정 키를 기준으로 병합할 수 있습니다.

# 공통된 'ID'를 기준으로 병합
df1 = pd.DataFrame({'ID': [1, 2, 3], 'Name': ['John', 'Anna', 'Peter']})
df2 = pd.DataFrame({'ID': [1, 2, 4], 'Age': [28, 24, 35]})
df_merged = pd.merge(df1, df2, on='ID')
print(df_merged)

0개의 댓글