Jupyter NoteBook

03. Jupyter Notebook DataFrame 기초

nananakh 2023. 6. 29. 01:00

1. DataFrame에서 일부 행 꺼내는 방법.

행 꺼내는 코드는 2가지가 있다.

행 꺼내는 함수명 설명
loc[ ] [ ] 안에 index 명을 입력
iloc[ ] 1. [ ] 안에 index 명을 입력
2. [ ] 안에 행의 범위, 열의 범위 입력
df.loc[3]

 

첫번째, loc은 location의 약자이다.

DataFrame의 index number의 위치를 알려주면 그 값을 출력해주는 것이다. 

주의해야 할 점은 [ ]안에 인덱스 번호를 넣어야 한다.

출력 값은 다음과 같다. 출력 값 중 name 열이 key 값이고, bear 열이 value 값이다.

출력값 예시 1

이때 시각화 좋게 출력하려면 [ ]를 두번 사용하면 된다.

df.loc[[3]]

 

여러 행을 출력하기 위해서는 다음과 같이 key 값들을 list로 작성해주면 된다.

df.loc[ [3, 6, 8] ]

 

두번째, iloc은 index location의 약자이고, 입력 순서는 [행, 열]이다.

이 함수는 행 하나씩 출력이 가능하고, 범위를 지정해서 출력이 가능하다.

df.iloc[3:6, :3]

범위 지정은 다른 범위 지정과 같이 뒷부분을 포함하지 않는다.

 

2. DataFrame에서 일부 열을 출력하거나 추가하는 방법

사실 일부 행을 출력하는 것은 많이 사용하지 않지만, 일부 열을 출력하거나 추가하는 것을 많이 사용한다.

DataFrame에서 name 열을 출력해보자. 자주 사용하는 것과 같이 코드는 매우 심플하다.

df['name']

DataFrame의 인덱스 열이 0~100으로 되어있기 때문에 Key 값이 인덱스 열로 구성되어 있다.

 

name열의 0번째 인덱스 열에 있는 것을 출력하고 싶으면 다음과 같다.

df['name'][0]

 

같은 방식으로 행부터 접근하려면 다음과 같다.

df.loc[0]['name']

 

DataFrame의 0번째 index 열에 있는 Value 중 name을 출력하라는 뜻이다.

 

이것도 행 출력과 같이 [ ]를 두번 사용하면 시각화가 좋다.

 

* 선택한 열의 문자열 중 특정 문자열이 포함되어 있는지 알 수 있는 코드 *

df['name'].str.contains('ar')

 

df["name"].str는 DataFrame 중 name 열에 있는 Data를 str 변수로 바꾼다는 뜻이다.

contains("ar")는 str 변수 중 "ar"이라는 문자열을 포함하고 있는지 물어보는 뜻이다.

열 출력값 예시 3

"ar" 문자열을 포함하고 있으면 True, 없으면 False로 표현한다.

 

이것을 활용해 sum( ) 함수에 넣으면 name열에 "ar"이라는 문자열을 포함한 data가 몇개인지 알려준다.

sum(df['name'].str.contains('ar'))

 

df['기준 열 이름'].str.~~에 쓸 수 있는 함수 설명
contains('AA') 기준 열에 AA가 포함된 문장 유무 확인 
lower( ) 기준 열의 문자열을 소문자로 변환
upper( ) 기준 열의 문자열을 대문자로 변환
startswiths('AA') 기준 열의 문자열이 AA로 시작되는지 유무 확인
endswiths('AA') 기준 열의 문자열이 AA로 끝나는지 유무 확인
dir(df['기준 열 이름'].str) 추가적인 기능 확인할 수 있음

추가적으로 cotains 함수를 사용하고, df DataFrame으로 감싸면 True 값만 남는다.

df[df['name'].str.contains('ar')]

 

 

DataFrame에서 기존 열에서 추가하는 방법.

그전에 일부 열만 떼어내서 새로운 DataFrame을 만들자.

new_df = df[['name', 'hair', 'feathers', 'eggs', 'milk', 'type']]

 

new_df에 hair 열에서 1씩 더한 열을 만드는 방법은 크게 2가지가 있다.

new_hair = []

for i in new_df['hair']:
	new_hair.append(i+1)

new_df['new_hair'] = new_hair
new_df['new_hair'] = new_df['hair'].apply(lambda x : x+1)

이때, apply 함수는 상당히 많이 쓰이니 알아두면 좋다.

new_df[['hair', 'type']].apply(np.sum, axis = 1)

axis = 0의 뜻은 열끼리 그룹화를 한다는 뜻이고, axis = 1의 뜻은 행끼리 그룹화를 한다는 뜻이다.

다시 코드로 돌아와 설명을 하면, new_df의 DataFrame의 hair 열과 type 열을 같은 행끼리 더해준다는 뜻이다.

이때, apply 함수에 lambda 함수를 넣을 수 있는데, lambda 함수는 간단한 계산을 할 때 편리하다.

코드를 설명하면 hair 열 각각의 column 값을 lambda x에 입력하고, 그 출력 값을 new_hair 열에 추가하는 것이다.

 

DataFrame을 특정 열을 기준으로 요약 정리 하는 방법.

요약 정리를 하기 위한 특정 열을 선정하려면 모두 연관 있는 데이터로 선정을 해야 한다.

Type 열이 모든 열과 연관성이 있다고 판단해 Type 열을 index 열로 하는 새로운 DataFrame을 만들겠다.

 

이 작업은 excel의 pivot table과 매우 유사하다.

pivot table이란, excel로 정리된 재무재표를 예시로 설명하면 쉽다.

이렇게 파일이 있다면 1월의 매출액이 얼마인지, 2월의 매출액이 얼마인지 한눈에 알아보기 힘들다.

그래서 excel에 내장되어 있는 pivot table 기능을 사용하면 1월, 2월, 3월 끼리 그룹화를 만들어 매출액을 한눈에 알아보기 쉽게 만들어준다.

pivot table 예시 2

달을 기준으로 하지 않고, 회사명, 제품명을 기준으로 해도 된다.

이와 같이 Type 열을 index 열로 하는 새로운 DataFrame을 만들어보자.

pivot_df = pd.pivot_table(new_df, index='type', aggfunc=np.sum)

 

함수 명 설명
pivot_table pandas에 내장된 기능
data DataFrame 원본
index index 기준 열
aggfunc = np.sum 집계 함수

aggfunc에 대한 추가적인 설명은, aggregatin function(집계 함수)의 약자이다.

aggfunc=np.sum은 만약 Type 열의 value 값이 1인 것을 그룹화로 묶은 다음 더했다는 뜻이다.

DataFrame 출력 예시 3

출력 값을 보면 name 열이 없는 것을 알 수 있다. name 열은 더하는 것이 불가능 하기 때문에 자체적으로 삭제한 것이다.

aggfunc=np.sum 대신 aggfunc=np.mean을 사용하면 평균 값을 넣어준다.

* 만약 Type 열이 아니라 gender와 같은 열을 사용하면 더 유용하게 활용할 수 있다.

 

3. 열을 삭제하는 방법

del pivot_df['new_hair']

 

그냥 delete의 약자와 삭제하고 싶은 열을 넣으면 된다.

4. 행을 삭제하는 방법

마찬가지로 행을 삭제하고 싶으면 DataFrame에 .loc을 쓴것과 마찬가지로 다음과 같이 작성해준다.

pivot_df.drop(['3', '4', '5'])

 

근데 이건 잘못된 것이다. 저렇게 쓰면 안지워진다.

pivot_df = pivot_df.drop(['3'])
pivot_df

출력값 예시 6

변수를 하나 생성하고 다시 써야 지워진다.

 

추가적으로 알아두면 좋은 함수들이다.

열의 이름을 보여주는 함수는 다음과 같다.

pivot_df.columns
Index(['eggs', 'feathers', 'hair', 'milk'], dtype='object')

columns는 열의 이름이라는 뜻이다. 인덱스 열 빼고 eggs부터 milk까지 보여준다.

 

그러면 index 열의 value 값을 보여주는 함수는 다음과 같다.

pivot_df.index
Int64Index([2, 3, 4, 5, 6, 7], dtype='int64', name='type')

 

열 이름을 바꾸고 싶을 때 사용하는 함수이다.

열 이름을 바꾸는 것은 그냥 pivot_df.columns = [~~, ~~, ~~, ~~ 열 갯수에 맞게 작성] 하면 되는데 만약 열이 300개라면? 그날 그냥 큰일나는 것이다.

pivot_df.rename(columns={'eggs':'산란', 'feathers':'깃털'}, inplace=True)

 

DataFrame.rename은 말 그대로 DataFrame의 이름을 바꾸겠다 라는 뜻

columns = {'eggs':'산란', 'feathers':'깃털'}는 열의 이름 중 'egg'를 '산란'으로, 'feathers'를 '깃털'로 바꾸겠다는 뜻

inplace=True는 덮어쓰기를 허용한다는 뜻

출력값 예시 7

산란 수 기준으로 정렬하는 방법은 다음과 같다. 정렬함수 sort를 사용하면 된다.

pivot_table.sort_values(by='산란', inplace=True, ascending=True)

 

함수 명 설명
DataFrame.sort_values DataFrame을 values 기준으로 정렬
by='산란'  기준 열은 '산란' 
inplace=True 덮어쓰기를 허용
 ascending=True ascending의 뜻은 오르다.
True는 오름차순 / False는 내림차순

추가적으로 DataFrame을 복사하는 방법도 2가지가 있다.

 

1. 원본이 바뀌면 같이 바뀌는 복사

pivot_df_2 = pivot_df

원본 DataFrame인 pivot_df와 연결되어 있기 때문이다.

 

2. 원본이 바껴도 안바뀌는 복사

pivot_df_3 = pivot_df.copy()

원본 DataFrame인 pivot_df로부터 분리되어 별도로 존재합니다.

'Jupyter NoteBook' 카테고리의 다른 글

02. Jupyter Notebook File 읽기  (0) 2023.06.28
01. Jupyter Notebook 단축키  (0) 2023.06.27