1. 판다스(Pandas)
- 데이터 분석을 위한 파이썬 라이브러리 중 하나로, 표 형태의 데이터나 다양한 형태의 데이터를 쉽게 처리하고 분석
- 데이터 프레임(DataFrame)이라는 자료구조를 제공
!pip install pandas
import pandas as pd
2. Series와 DataFrame
2-1. Series
- Series는 1차원 배열과 같은 자료구조로 하나의 열을 나타냄
- 각 요소는 인덱스(index)와 값(value)으로 구성되어 있음
- 값은 넘파이의 ndarray 기반으로 저장됨
- Series는 다양한 데이터 타입을 가질 수 있으며 정수, 실수, 문자열 등 다양한 형태의 데이터를 담을 수 있음
idx = ['김사과', '반하나', '오렌지', '이메론', '배애리']
data = [67, 75, 75, 62, 98]
# Series(데이터, 인덱스)
pd.Series(data)
0 67
1 75
2 75
3 62
4 98
dtype: int64
se1 = pd.Series(data, index=idx)
se1
김사과 67
반하나 75
오렌지 75
이메론 62
배애리 98
dtype: int64
print(se1.index)
print(se1.values)
Index(['김사과', '반하나', '오렌지', '이메론', '배애리'], dtype='object')
[67 75 75 62 98]
2-2 DataFrame
- 데이터프레임은 판다스 라이브러리에서 제공하는 중요하고 강력한 데이터 구조로 2차원 테이블 형태데이터를 다룸
- 데이터프레임의 각 요소는 인덱스(index), 열(column), 값(value)으로 구성되어 있음
- 데이터프레임은 행과 열로 이루어져 있으며, 각 열은 다양한 데이터 타입을 가질 수 있음
- 값은 넘파이의 ndarray 기반으로 저장
data = [[67, 93, 91],
[75, 68, 96],
[76, 81, 82],
[62, 70, 75],
[98, 56, 87]]
idx = ['김사과', '반하나', '오렌지', '이메론', '배애리']
col = ['국어', '영어', '수학']
# DataFrame(데이터, 인덱스, 컬럼, ...)
pd.DataFrame(data, idx)
0 1 2
김사과 67 93 91
반하나 75 68 96
오렌지 76 81 82
이메론 62 70 75
배애리 98 56 87
pd.DataFrame(data, idx, col)
국어 영어 수학
김사과 67 93 91
반하나 75 68 96
오렌지 76 81 82
이메론 62 70 75
배애리 98 56 87
df = pd.DataFrame(data=data, index=idx, columns=col)
df
국어 영어 수학
김사과 67 93 91
반하나 75 68 96
오렌지 76 81 82
이메론 62 70 75
배애리 98 56 87
print(df.index)
print(df.columns)
print(df.values)
Index(['김사과', '반하나', '오렌지', '이메론', '배애리'], dtype='object')
Index(['국어', '영어', '수학'], dtype='object')
[[67 93 91]
[75 68 96]
[76 81 82]
[62 70 75]
[98 56 87]]
2-3. 딕셔너리를 사용하여 데이터프레임을 생성하기
dic = {
'국어' :[67, 75, 76, 62, 98],
'영어' :[93, 68, 81, 70, 56],
'수학' :[91, 96, 82, 75, 87]
}
df = pd.DataFrame(data=dic, index=idx)
df
국어 영어 수학
김사과 67 93 91
반하나 75 68 96
오렌지 76 81 82
이메론 62 70 75
배애리 98 56 87
3. CSV 파일 읽어오기
- csv(Comma Separated Values)의 약자로 데이터를 쉼표로 구분한 파일
df =pd.read_csv('/content/drive/MyDrive/코리아 IT/5. 데이터 분석/데이터/idol.csv')
df
4. 데이터프레임 기본정보 알아보기
# info(): 행(row), 열(column)의 기본적인 정보와 데이터 타입을 반환해줌
df.info()
# 컬럼명 변경하기
print(df.columns)
new_column = ['name', 'group', 'company', 'gender', 'birthday', 'height', 'blood' ,'brand']
df.columns = new_column
print(df.columns)
Index(['이름', '그룹', '소속사', '성별', '생년월일', '키', '혈액형', '브랜드평판지수'], dtype='object')
Index(['name', 'group', 'company', 'gender', 'birthday', 'height', 'blood',
'brand'],
dtype='object')
df
# describe(): 통계 정보를 반환
df.describe()
df.describe(include=object) # top: 최빈값, freq: 최빈값의 빈도
df.head(3) # 상위 3개 row를 출력
df.tail(5) # 하위 5개 row를 출력
df.tail(2) # 마지막 2개 row를 출력
# 정렬하기
df.sort_index() # index로 오름차순 정렬: 기본값
df.sort_index(ascending=False) # index로 내림차순 정렬
df.sort_values(by='height') # height로 오름차순 정렬
df.sort_values(by='height', ascending=False) # height로 내림차순 정렬
df.sort_values(by='height', ascending=False, na_position='first') # height로 내림차순 정렬, nan을 맨위로
# 1차 정렬: 키(내림차순), 2차 정렬: 브랜드(내림차순)
df.sort_values(by=['height', 'brand'], ascending=[False, False])
5. 데이터 다루기
df.head()
df['blood']
type(df['blood'])
df.blood
df.head(3)
# 범위 선택
df[:3]
# loc 인덱싱: 이름 인덱싱, 행과 열 모두 인덱싱과 슬라이싱이 가능
df.loc[:, 'name'] # df['name']
df.loc[2:5, 'name'] # 5번을 포함
df.loc[2:5, ['name', 'gender', 'height']]
df.loc[2:5, 'name':'gender']
# iloc 인덱싱: index로 인덱싱, 행과 열 모두 인덱싱과 슬라이싱이 가능
df.iloc[:, 0]
df.iloc[:, [0, 2]]
df.iloc[:, 0:2] # 2번 컬럼을 포함하지 않음
df.iloc[1:5, 0:2]
df['height'] >= 180
df['name'][df['height'] >= 180] # df[df['height'] >= 180]['name']
df[df['height'] >= 180]['name'] # df['name'][df['height'] >= 180]
df[df['height'] >= 180][['name', 'gender','height']]
문제
- 키가 180cm 이상인 연예인의 이름, 성별, 키, 브랜드평판지수를 출력
- 단, loc를 사용
df.loc[df['height'] >= 180, ['name', 'gender', 'height', 'brand']]
# isin(): 정의한 list에 있는 데이터를 불린으로 반환
df
company = ['빅히트', '어도어']
df['company'].isin(company)
df[df['company'].isin(company)] # df[df['company'].isin(company), :]
6. 결측값(Null,NaN)
- 비어있는 값, 판다스에서는 NaN(Not a Number)로 표기된 것은 모두 결측값으로 취급