[AI 기초 다지기] Pandas
Pandas란?
Pandas는 데이터 분석을 쉽게 할 수 있도록 도와주는 라이브러리로, 표 형식의 데이터를 다루는 데에 최적화 되어있다.
데이터프레임과 시리즈라는 두 가지 기본 데이터 구조를 사용해 엑셀, SQL 데이터베이스와 비슷한 방식으로 데이터를 처리할 수 있게 해주며, 특히 대용량 데이터 분석에 매우 유용하게 쓰인다.
Pandas의 데이터 구조
- Series: 레이블이 있는 1차원 배열이다. 엑셀의 하나의 열이나 파이썬의 리스트와 비슷하지만 각 데이터에 고유한 레이블을 가질 수 있다는 점이 장점이다.
import pandas as pd
s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s)
#결과
a 10 b 20 c 30
dtype: int64
- DataFrame: 레이블이 있는 2차원 테이블을 의미한다. 행과 열이 있고, 각 열은 서로 다른 데이터 타입을 가질 수 있다. 엑셀 시트나 SQL 테이블이 대표적이다.
data = {'Name': ['Alice', 'Bob'], 'Age': [25, 30]}
df = pd.DataFrame(data)
print(df)
#결과
Name Age
0 Alice
25 1
Bob 30
Pandas 활용 방법
Pandas를 이용하여 데이터를 여러 가지로 활용 할 수 있다.
1. 데이터 불러오기
Pandas를 활용하여 데이터를 불러오는 방법은 다양하다. 대표적으로 Pandas는 다음과 같은 함수들을 제공한다.
- pd.read_csv() : CSV 파일
- pd.read_excel() : 엑셀 파일
- pd.read_sql() : SQL 데이터베이스
- pd.read_json() : JSON 파일
2. 데이터 확인 및 탐색
데이터 확인 및 탐색 함수를 이용하여 효과적으로 많은 양의 데이터를 탐색할 수 있다.
- df.head(): 데이터프레임의 상위 몇 개의 행을 탐색한다.
- df.info(): 데이터의 구조, 컬럼, 데이터 타입 등을 확인할 수 있다.
- df.describe(): 숫자형 데이터의 기본 통계 정보를 제공한다.
3. 데이터 조작 및 변환
Pandas에서 데이터를 조작 및 변환할 수 있는 방법은 다양하다. 이 글에서는 대표적으로 인덱싱과 슬라이싱, 필터링, 결측값 처리를 간단히 소개한다.
1. 인덱싱과 슬라이싱
행과 열을 선택하거나 필터링하여 필요한 데이터만 추출할 수 있다.
# 인덱싱과 슬라이싱 예시
# 데이터프레임 생성
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eva'],
'Age': [25, 30, 35, 40, 22],
'City': ['New York', 'Los Angeles', 'Chicago', 'Houston', 'Miami']
}
df = pd.DataFrame(data)
# 1. 단일 컬럼 인덱싱
single_column = df['Name']
# 2. 여러 컬럼 인덱싱
multiple_columns = df[['Name', 'Age']]
# 3. 행과 열 슬라이싱 (iloc를 이용한 위치 기반 선택)
row_slice = df.iloc[1:4] # 2번째부터 4번째 행까지 선택
# 4. 조건 기반 필터링
age_filter = df[df['Age'] > 30] # 나이가 30 이상인 행만 필터링
2. 필터링
조건에 맞는 데이터를 선택할 수 있다. 예를 들어, 특정 값보다 큰 값만 필터링하거나 특정 문자열이 포함된 행만 추출할 수 있다.
# 필터링 예시
# 나이가 30보다 큰 경우 필터링
age_above_30 = df[df['Age'] > 30]
# 특정 도시에 사는 사람들 필터링
# isin : 일치하는 요소만 확인, bool을 리턴한다.
city_filter = df[df['City'].isin(['New York', 'Chicago'])]
3. 결측값 처리
데이터셋에 있는 결측값을 처리하는 방법도 제공한다. 결측값을 제거하거나, 특정 값으로 채우거나(fillna()), 평균 값으로 대체할 수 있다.
결측값이란?
Pandas에서 결측값은 데이터셋에서 특정 값이 존재하지 않거나 누락된 경우를 말한다.
결측값은 데이터를 수집하는 과정에서 누락되거나 기록되지 않아서 발생할 수 있는데, 결측값은 데이터 분석 및 머신러닝 모델의 성능에 영향을 미칠 수 있기 때문에 적절한 처리가 필요하다.
Pandas에서 결측값은 일반적으로 NaN으로 표시되며, 결측값을 처리하는 다양한 방법이 존재한다. 결측값을 처리하는 방법은 일반적으로 결측값의 존재 유무 확인 후 제거 or 채우기로 진행된다.
결측값 처리 예시)
1. 결측값 확인
df.isna() # 각 값이 결측인지 아닌지를 True/False로 보여줌
df.isna().sum() # 각 열에 있는 결측값의 개수
2. 결측값 제거
#dropna 메서드는 DataFramde내의 결측값이 포함된 레이블을 제거하는 메서드이다.
df.dropna() # 결측값이 있는 행을 모두 삭제
df.dropna(axis=1) # 결측값이 있는 열을 모두 삭제
3. 결측값 채우기
# fillna 메서드는 DataFrame에서 결측값을 원하는 값으로 변경하는 메서드이다.
df.fillna(0) # 결측값을 0으로 채움
df['column_name'].fillna(df['column_name'].mean()) # 결측값을 평균값으로 채움
마지막으로 Pandas와 Numpy를 활용한 예제
import numpy as np
import pandas as pd
# NumPy로 데이터 생성
data = np.random.randn(5, 3) # 5x3 크기의 난수 배열 생성
columns = ['A', 'B', 'C'] # 컬럼 이름 지정
# Pandas DataFrame으로 변환
df = pd.DataFrame(data, columns=columns)
# NumPy 배열에서 A열의 모든 값에 제곱
df['A_squared'] = np.square(df['A'])
# B열의 값을 기준으로 새로운 파생 변수를 생성
# np.where 조건에 따라 x 또는 y 에서 선택된 요소를 반환한다.
df['B_positive'] = np.where(df['B'] > 0, 'Positive', 'Negative')