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의 각 값은 인덱스를 이용해 선택할 수 있다.
- 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. 고급 인덱싱 및 데이터 선택
- 조건부 인덱싱
- 조건부 선택 : 특정 조건을 만족하는 데이터를 선택할 수 있다.
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'])
- 고급 인덱싱 기법: 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: 특정 열을 인덱스로 지정
'Data Analysis > Data Analysis ?' 카테고리의 다른 글
데이터 분석 도구 : NumPy (0) | 2025.02.27 |
---|---|
데이터 분석 도구: 배열(연산, 인덱싱, 슬라이싱) (0) | 2025.02.27 |
데이터 분석(Data Analysis) 이란? (0) | 2025.02.27 |