Pandas - 2. 데이터 구조
2025. 1. 24. 18:09ㆍ프로그래밍 (확장)/Python-Pandas
Pandas는 데이터를 효율적으로 분석하고 조작하기 위해 두 가지 주요 데이터 구조인 Series와 DataFrame을 제공합니다. 이 문서에서는 초보자도 쉽게 이해할 수 있도록 각 데이터 구조의 정의, 생성 방법, 속성, 활용 방법을 예제와 함께 상세히 설명합니다.
1. Series
1.1 Series의 정의와 특성
- 정의: Series는 1차원 데이터 구조로, 값(value)과 인덱스(index)의 결합 형태입니다.
- 특성:
- Python의 리스트, 딕셔너리, Numpy 배열과 유사하지만, 데이터에 레이블(index)을 부여할 수 있는 강력한 기능을 제공합니다.
- 같은 데이터 타입의 값들의 집합이며, 인덱스를 통해 데이터 접근이 용이합니다.
1.2 Series 생성 방법
1. 리스트로 생성
import pandas as pd
# 리스트를 이용한 Series 생성
data = [10, 20, 30]
series = pd.Series(data)
print(series)
출력:
0 10
1 20
2 30
dtype: int64
2. 딕셔너리로 생성
# 딕셔너리를 이용한 Series 생성
data = {'a': 10, 'b': 20, 'c': 30}
series = pd.Series(data)
print(series)
출력:
a 10
b 20
c 30
dtype: int64
3. Numpy 배열로 생성
import numpy as np
# Numpy 배열을 이용한 Series 생성
data = np.array([1.1, 2.2, 3.3])
series = pd.Series(data)
print(series)
출력:
0 1.1
1 2.2
2 3.3
dtype: float64
1.3 Series의 속성
- index: Series의 인덱스를 반환합니다.
- values: Series의 값을 배열로 반환합니다.
- dtype: 데이터의 자료형을 반환합니다.
예제:
print(series.index) # RangeIndex(start=0, stop=3, step=1)
print(series.values) # [1.1 2.2 3.3]
print(series.dtype) # float64
1.4 Series의 연산 및 활용
1. 벡터화 연산
# 수치 연산
series = pd.Series([1, 2, 3])
result = series * 10
print(result)
출력:
0 10
1 20
2 30
dtype: int64
2. 조건 필터링
# 조건에 따른 필터링
filtered = series[series > 1]
print(filtered)
출력:
1 2
2 3
dtype: int64
1.5 Series와 DataFrame 간 변환
1. Series를 DataFrame으로 변환
series = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
df = series.to_frame(name='Values')
print(df)
출력:
Values
a 10
b 20
c 30
2. DataFrame에서 Series 추출
data = {'col1': [1, 2, 3], 'col2': [4, 5, 6]}
df = pd.DataFrame(data)
series = df['col1']
print(series)
출력:
0 1
1 2
2 3
Name: col1, dtype: int64
2. DataFrame
2.1 DataFrame의 정의와 특성
- 정의: DataFrame은 2차원 데이터 구조로, 행(row)과 열(column)로 구성됩니다.
- 특성:
- 여러 Series가 모여 구성된 형태입니다.
- 각 열은 동일한 데이터 타입을 가지며, 서로 다른 열은 다른 데이터 타입을 가질 수 있습니다.
- 데이터를 테이블 형식으로 표현하며, 엑셀이나 데이터베이스 테이블과 유사합니다.
2.2 DataFrame 생성 방법
1. 딕셔너리로 생성
# 딕셔너리를 이용한 DataFrame 생성
data = {
'Name': ['Alice', 'Bob', 'Charlie'],
'Age': [25, 30, 35],
'City': ['New York', 'Los Angeles', 'Chicago']
}
df = pd.DataFrame(data)
print(df)
출력:
Name Age City
0 Alice 25 New York
1 Bob 30 Los Angeles
2 Charlie 35 Chicago
2. Numpy 배열로 생성
import numpy as np
# Numpy 배열을 이용한 DataFrame 생성
data = np.array([[1, 2], [3, 4], [5, 6]])
df = pd.DataFrame(data, columns=['A', 'B'])
print(df)
출력:
A B
0 1 2
1 3 4
2 5 6
3. CSV 파일로 생성
# CSV 파일 읽기 (에러 처리 포함)
try:
df = pd.read_csv('example.csv', encoding='utf-8')
print(df)
except FileNotFoundError as e:
print(f"에러 발생: {e}")
2.3 DataFrame의 속성
- shape: 행과 열의 크기
- columns: 열 이름
- index: 인덱스 확인
예제:
print(df.shape) # (3, 3)
print(df.columns) # Index(['A', 'B'], dtype='object')
print(df.index) # RangeIndex(start=0, stop=3, step=1)
2.4 DataFrame과 Series의 메모리 관리
메모리 최적화 효과 예제
import numpy as np
# 메모리 최적화 효과 확인
df = pd.DataFrame({'A': np.random.randint(0, 100, 10000)})
print(f"최적화 전: {df.memory_usage(deep=True).sum()} bytes")
df['A'] = pd.to_numeric(df['A'], downcast='integer')
print(f"최적화 후: {df.memory_usage(deep=True).sum()} bytes")
3. Index 객체 심화 활용
3.1 Index 객체의 특성 및 활용
- Index 객체는 DataFrame과 Series의 행 레이블을 관리하며, 고유성을 보장합니다.
- 불변(immutable) 속성을 가지며, 데이터 무결성을 유지합니다.
예제:
print(df.index) # RangeIndex(start=0, stop=3, step=1)
print(df.index.is_unique) # True
3.2 MultiIndex 생성 및 관리
MultiIndex 생성
arrays = [['A', 'A', 'B'], [1, 2, 1]]
index = pd.MultiIndex.from_arrays(arrays, names=('Group', 'Number'))
data = [10, 20, 30]
series = pd.Series(data, index=index)
print(series)
출력:
Group Number
A 1 10
2 20
B 1 30
dtype: int64
'프로그래밍 (확장) > Python-Pandas' 카테고리의 다른 글
Pandas - 4. 데이터 선택 및 필터링 (0) | 2025.02.04 |
---|---|
Pandas - 3. 데이터 입출력 (I/O) (0) | 2025.01.24 |
Pandas - 1. 소개와 설치 (0) | 2025.01.24 |
판다스 (Pandas) (Pivot Table) (0) | 2024.08.03 |
판다스 (Pandas) (GroupBy) (0) | 2024.08.03 |