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의 다른 기능들도 하나씩 익혀보세요!
'공부 > 판다스(Pandas)' 카테고리의 다른 글
Pandas로 배우는 데이터 전처리(정렬, 필터링, 중복 처리, 변환과 치환) (1) | 2024.10.12 |
---|---|
Pandas를 활용한 데이터 탐색 방법(데이터 조회, 인덱싱, 슬라이싱, 결측값 처리) (0) | 2024.10.11 |
Pandas로 시작하는 데이터 분석/비전공자도 쉽게 배우는 필수 도구 (5) | 2024.10.04 |
[Pandas] 판다스를 활용하여 데이터 분석 하는 방법 (0) | 2023.12.05 |
[Pandas] 판다스를 이용하여 데이터 불러오기/csv 파일 읽기 (0) | 2023.01.16 |