본문 바로가기
IT/Python 데이터 분석 활용

[Python] Pandas[판다스] 활용하기(1)

by Tony Jung 2024. 5. 29.
반응형

Pandas 라이브러리 

판다스(Pandas)는 파이썬 데이터 분석 라이브러리 중 하나로, 행과 열로 이루어진 데이터 객체를 만들어서 사용할 수 있으며 대용량의 데이터를을 처리하는데 매우 편한 라이브러리 입니다. 판다스는 1차원  데이터를 다루기 위한 객체인 Series(시리즈)와 2차원 데이터를 다루는 DataFrame(데이터프레임)이 있습니다. 

Pandas 설치 

Pandas를 사용하려면 먼저 라이브러리 설치가 필요합니다. 아래와 같이 VSCode의 Termial 에서 Pandas를 설치 합니다. 

pip install pandas

DataFrame

행과 열로 이루어진 2차원 데이터 객체이며, 열은 각각의 변수를 나타내고,행은 각각의 관측치를 나타냅니다.

기본적으로 생성할때는 2차원 리스트 또는 딕셔너리, 파일로부터 생성 할 수 있습니다.

import pandas as pd

#리스트를 사용하여 DataFrame 객체 생성 

data=[['Tony',100],['Lena',90],['Helen',70]]
df=pd.DataFrame(data, columns=['Name','Point'])
print(df)

# 	Name	Point
#0	Tony	100
#1	Lena	90
#2	Helen	70
import pandas as pd

#딕셔너리를 사용하여 객체 생성 

data1={'Name':['Tony','Lena','Helen'],'Point':[100,80,70]}
df1=pd.DataFrame(data1)
print(df1)


# 	Name	Point
#0	Tony	100
#1	Lena	90
#2	Helen	70

이젠 Pandas 객체에 담긴 데이터들에 대한 처리를 한번 해볼까요 우선 행,열 단위로 조회할 수 있습니다. 열 단위일 경우는 열명칭을 지칭하여 해당열을 조회 할 수 있으며, 행의 경우 Index 를 지정하여 조회할 수 있습니다. 

#열 선택(예시 1)
print(df['Name'])

#결과값
#0	Tony
#1	Lena
#2	Helen

#열 선택(예시2) 

print(df['Name','Point'])

#결과값
#0	Tony	100
#1	Lena	80
#2	Helen	70
#행 선택 예시1

print(df.loc[0])

#결과값
#Name	Tony
#Point	100

#행 선택 예시2
print(df.loc[[0,1]])

#결과값
	Name	Point
#0	Tony	100
#1	Lena	90

주의할 점은 행 선택 시 1개의 행을 선택 할 때와 여러 행을 선택할 때 대괄호의 차이입니다. 다음으로는 열과 행을 추가하거나 삭제하여 데이터를 조작하는 방법입니다. 

#열 추가

df['Age']=[10,20,30]
print (df)

#결과값
#	Name	Point	Age
#0	Tony	100	10
#1	Lena	80	20
#2	Helen	70	30

기존 Name하고 Point 열에서 추가로 Age 열이 필요할 경우, 위와 같이 열이름과 값을 등록합니다. 여기서 열에 추가되는 값의 개수는 행의 개수와 동일하여야 합니다. 만약 10,20 만 넣고 싶을 때는 df['Age']=[10,20]이 아닌 df['Age']=[10,20,0] 으로 하셔야 합니다. 만약 추가한 열의 값들이 문자열이었다면 df['Age']=['10','20',''] 과 같이 공란을 넣어 주시면 됩니다. 

# 열 삭제 

df.drop('Age',axis=1,inplace=True)
#결과값
#	Name	Point
#0	Tony	100
#1	Lena	80
#2	Helen	70

drop(삭제)시 옵션의  axis는 기본 0 이며 0은 행을 의미합니다. 여기서는 열을 삭제해야 하기에 axis는 1로 꼭 설정하여야 합니다. 또한 Inplace 옵션은 기본 False로 Drop과 같은 명령어를 실행 한 후 메소드가 적용된 데이터 프레임을 기존 데이터 프레임으로 대체하는 것이며, True일 경우 명령어를 실행 한 후 메소드가 적용된 데이터 프레임을 반환 한다는 의미 입니다.

#행추가

df.loc[3]=['James',100]
print (df)
#결과값
#	Name	Point
#0	Tony	100
#1	Lena	80
#2	Helen	70
#3	James	100

#행 삭제 
df.drop(3,inplace=True)
print(df)
#결과값
#	Name	Point
#0	Tony	100
#1	Lena	80
#2	Helen	70

인덱스(Index)

인덱스는 Database에서 주로 쓰는 용어로 "쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블의 검색 속도를 향상시키기 위한 자료 구조" 입니다. 예를 들어 우리가 책에서 원하는 내용을 찾을 경우, 책의 모든 페이지를 찾아보는 것은 시간이 오래 걸릴 것입니다. 이때 책의 맨앞에 있는 색인을 활용해서 찾아보면 더 빠르게 찾아볼 수 있는데 인덱스(Index)는 책의 색인과 같이 데이터와 데이터의 위치를 포함한 자료 구조를 뜻합니다. 

위에 데이터를 생성할 때 자동으로 인덱스가 생성됨을 확인 할 수 있습니다. 아래의 0,1,2는 시스템에서 자동으로 생성한 인덱스 입니다. 

#	Name	Point
#0	Tony	100
#1	Lena	80
#2	Helen	70

시스템에서 자동으로 생성한 인덱스외에 사용자가 직접 인덱스를 생성하거나 데이터에서 특정 열을 인덱스로 지정할 수 있습니다. 일반적으로 인덱스는 아래의 4가지 조건으로 설정합니다. 

반응형

 

1. 카디널리티 (Cardinality)

카디널리티가 높은면 인덱스 설정에 좋은 컬럼입니다. 카디널리티가 높다는 것은 한 컬럼이 갖고 있는 값의 중복도가 낮음을 의미합니다. 하나의 데이터셋에서 중복 값이 없는 고유의 값을 가지고 있는 열입니다.

2. 선택도 (Selectivity)

선택도가 낮으면 인텍스 설정에 좋은 컬럼입니다. 선택도가 낮다는 것은 한 컬럼이 갖고 있는 값 하나로 적은 Row를 찾는 다는 의미 입니다.

3. 조회 활용도

조회 활용도가 높으면 인덱스 설정에 좋은 컬럼입니다. 조회 활용도는 실제 작업에서 얼마나 많이 활용되고 있는지를 의미한답니다.

4.수정빈도 

수정빈도가 낮으면 인덱스 설정에 좋은 컬럼입니다. 인덱스로 지정된 컬럼의 값이 바뀌게 되면 인덱스 테이블도 새롭게 갱신되어야 하기에 수정빈도가 낮은(거의 없는) 컬럼을 선택하여야 합니다. 기본적으로 테이블당 1~5정도가 적당하며 각각의 활용도의 우선순위로 설정하기를 추천합니다. 위의 예시 파일에서 인덱스를 자동이 아닌 "Name" 값을 설정 해볼까요? index=data1['Name'] 으로 Name 열을 인덱스로 설정 할 수 있습니다. 

import pandas as pd
#딕셔러니를 사용하여 데이터 프레임을 만들때
data1={'Name':['Tony','Lena','Helen'],'Point':[100,80,70]}
df1=pd.DataFrame(data1,index=data1['Name'])
print(df1)


# 	Name	Point
#Tony	Tony	100
#Lena	Lena	90
#Helen	Helen	70

#리스트를 사용하여 데이터 프레임을 만들때 

data=[['Tony',100],['Lena',90],['Helen',70]]
df=pd.DataFrame(data, columns=['Name','Point'])
df=set_index('Name',inplace=True)
print(df)

# 		Point
#	Name	
#	Tony	100
#1	Lena	90
#2	Helen	70

만약 인덱스(index)가 필요없거나 재지정을 위해 초기화가 필요하다면 reset_index()를 통해 초기화 할 수 있습니다.

df.reset_index()

#	Name	Point
#0	Tony	100
#1	Lena	80
#2	Helen	70

 

다음 포스팅에서는 Pandas에서 데이터 필터, 정렬 그리고 엑셀등 파일로 부터 데이터를 Pandas에 담는 과정, 글리고 데이터를 시각화하는 과정을 설명 하겠습니당~

 

 

반응형

댓글