문제 설명
자세히 보기
데이터 프레임
Pandas는 데이터를 처리하기 위해 Data Frame을 제공하는데,
이는 우리에게 익숙한 표(행과 열) 형태로 작성되어 다음과 같은 기능들을 제공합니다.
•
데이터 조회
•
데이터 변환
•
칼럼 추출
•
결측치 처리
•
등등…
다음 공식 documentation을 통해 관련 정보를 쉽게 얻으실 수 있습니다.
다음 데이터를 만든다고 가정하겠습니다.
id | name | weight | height |
1 | Park | 70 | 167 |
2 | Amy | 60 | 158 |
3 | Michael | 80 | 175 |
4 | Donald | 102 | 181 |
열을 이용하여 만들기
import pandas
# 데이터 초기화
df = pandas.DataFrame()
# Column의 이름과 Data를 이용해 열 데이터 초기화
df['id'] = ['1','2','3','4']
df['name'] = ['Park','Amy','Michael','Donald']
df['weight'] = [70,60,80,102]
df['height'] = [167,158,175,181]
Python
복사
행을 이용하여 만들기
import pandas
# 데이터 초기화
df = pandas.DataFrame(columns=['id', 'name', 'weight', 'height'])
# Column의 이름과 Data를 이용해 열 데이터 초기화
df.loc[0] = ['1','Park',70,167]
df.loc[1] = ['2','Amy',60,158]
df.loc[2] = ['3','Michael',90,175]
df.loc[3] = ['4','Donald',102,181]
Python
복사
이 외에도 dict 자료형 등을 통해 DataFrame을 생성할 수도 있습니다.
행(Row)/열(Column) 추출하기
특정 열 선택하기
추출하는 방식은 다음과 같습니다.
DataFrame[['칼럼명1', '칼럼명2', ...]]
Python
복사
다음과 같은 데이터가 있다고 가정하겠습니다.
import pandas
data = {
'A':[1,2,3,4,5],
'B':['a','b','c','d','e'],
'C':['apple','banana','grape','strawberry','peach'],
'D':[11,22,33,44,55]
}
df = pandas.DataFrame(data)
Python
복사
df에는 A, B, C, D 4개의 Column이 존재합니다.
여기서 원하는 칼럼을 선택하고 (예: B, C) 다음과 같이 추출하면 됩니다.
df[['B', 'C']]
Python
복사
대괄호가 두개 쌓여있기에 추출 결과는 다음과 같습니다.
B | C |
a | apple |
b | banana |
c | grape |
d | strawberry |
e | peach |
특정 행 선택하기
열 선택과 비슷하나, 인덱스 슬라이싱 기법을 사용합니다.
df[1:2]
df[0:3]
df['0':'3'] # 특정 행 범위 출력도 가능함
Python
복사
iloc 사용하기
iloc는 인덱싱을 위한 함수 중 하나입니다.
DataFrame.iloc[:, [ColumnIndex1, ColumnIndex2, ...]]
Python
복사
ColumnIndexN에는 내가 추출하고자 하는 컬럼의 인덱스 번호를 넣어주세요.
B, C를 추출하고자 하는 경우 인덱스는 각각 1, 2입니다.
여기서 range를 사용할 수도 있습니다.
test_range = list(range(3, 6))
DataFrame.iloc[:, test_range]
Python
복사
drop 사용하기
drop은 본래는 칼럼을 제거하는 역할을 수행합니다.
그러나 “나머지 칼럼을 제거하는” 방식으로 사용하여 추출할 수도 있습니다.
DataFrame.drop(['Column1', 'Column2', ...], axis=1)
Python
복사
B, C를 추출하고자 하는 경우 A, D를 drop하면 되겠죠?
추출하고자 하는 Column이 그렇지 않은 Column보다 많은 경우 유용합니다.
그룹화시키기
테스트 데이터는 밑의 블로그에서 작성된 내용입니다.
이 데이터를 그룹화 후 연산하기 위해 Groupby를 사용합니다.
Groupby의 동작 방식입니다.
1.
전체 데이터를 그룹별로 분할
: split
2.
mean(), sum(), count()등 같은 Aggregate function으로 연산
: apply
Apply 단계에는 3가지 연산이 존재합니다.
•
Aggregation
Split 된 그룹의 Average, Variation, Size 등 통계적인 값 계산
•
Transformation
한 그룹의 계산 결과를 Index Object처럼 추가
•
Filteration
특정 조건을 만족하는 Boolean Column을 생성해 그룹 새로 만듦
3.
연산결과를 다시 합침
: combine
각자 csv 파일을 가져와 DataFrame으로 전환하는 부분은 셀프!
(tip: pandas.read_csv)
문법은 다음과 같습니다.
DataFrame.groupby(COL_GROUP)[COL_CALCULATE].function()
Python
복사
function에는 다양한 집계 함수가 들어갈 수 있습니다.
•
중심 경향을 계산하는 함수
mean 평균
median 중위수
id별 평균 키를 구하려면 다음과 같이 입력하면 되겠네요.
df.groupby("id")["height"].mean()
df.groupby("id")["height"].median()
Python
복사
•
총 숫자를 계산하는 함수
count 개수
sum 합산
df.groupby("id").count()
Python
복사