Data Analysis/Python

[Pandas] Pandas 자료형_Series, Data Frame, Index

太热了 2022. 3. 30. 14:12

#Pandas #Python #데이터분석 #데이터관리

Pandas는 데이터 관리 및 분석을 위한 파이썬 패키지로, 행과 열로 구성된 데이터 객체를 효과적으로 다루기 위해 설계 되었다.Pandas는 파이썬의 모든 패키지 가운데 업무 자동화에 가장 중요한 패키지이다! 오늘은 자료형인 Series, DataFrame, Index 에 대해서 자세히 알아보고, 데이터를 불러와 간단한 분석을 가능하게 할 데이터 함수에 대해서 배웠다.

Pandas 자료형

#Series #DataFrame #Index
자료형의 필요성과 구조 학습, 생성하는 방법과 요소를 변경하는 방법 학습

  • Series 기초

Pandas의 가장 기본이 되는 자료형으로 인덱스와 값으로 구성
: 각 요소에 대한 이름이 있는 배열 자료형

: Series를 만들기 위해서 Series() 함수 사용!
- 인덱스와 값을 바탕으로 만드는 방법
- 사전이라는 자료형을 바탕으로 만드는 방법

import pandas as pd import numpy as np 
A = pd.Series({'A':10, 'B':20, 'C':30}) 
print(A)
import pandas as pd import numpy as np 
A = pd.Series([10, 20, 30], index = [1, 2, 3]) 
print(A)

: .values 와 .index 기능을 사용해서 series의 구성 요소 확인 가능
: Series는 Index와 numpy의 ndarray 로 구성

: Numpy 모듈의 random()함수 이용하여 지정된 갯수만큼의 임의의 숫자가 들어가는 Series 생성하기

import pandas as pd import numpy as np 
A = pd.Series(np.random.random(10)) 
print(A)

 

  • Series의 연산

: Series의 값은 ndarray 자료형이므로, numpy가 지원하는 ndarray에 대한 연산을 똑같이 지원함.
: 유니버설 함수의 경우, ndarray는 위치가 같은 요소끼리 연산이 되지만, Series는 index 가 같은 요소끼리 연산 가능
: Numpy의 브로드캐스팅도 지원됨. 다만, Series는 기본적으로 1차원 배열이므로 1차원 배열과 상수 간 연산만 지원되는 것처럼 보일 수 있음.

import pandas as pd 
S_A = pd.Series([10,20,30], index = ['A','B','C']) 
S_B = pd.Series([30,20,10,50], index = ['A','B','C','D'] 
print(S_A + S_B) 
print(S_A * S_B) 

# A 40.0 
# B 40.0 
# C 40.0 
# D NaN 
# dtype: float64 

# A 300.0 
# B 400.0 
# C 300.0 
# D NaN 
# dtype: float64 

: .str에 속한 문자열 관련 함수를 사용하다면, Series에 속한 문자열 자료형에 일괄적으로 함수 적용
split() 이나 capitalize()

import pandas as pd 
S_C = pd.Series(['small','very samll']) 
print(S_C.str.upper()) 
# 0 SMALL 
# 1 VERY SAMLL 
# dtype: object

 

  • DataFrame 기초

: DataFrame은 두 개 이상의 Series로 구성된 자료형으로, 2차원 배열 혹은 행렬으로 볼 수 있음.
: 행 ID index, 열 ID 컬럼으로 구성되는 DataFrame = Excel !
: DataFrame() 함수를 사용하여 생성
- 중첩된 배열로부터 만드는 방법
- 사전으로부터 만드는 방법

import pandas as pd 
df1 = pd.DataFrame( { '컬럼1':[1, 2, 3, 4], '컬럼2':[10, 20, 30, 40] }, index = ['A', 'B', 'C', 'D'] ) 
print(df1.to_html()) 

=> to.html() 함수는 DataFrame 을 html 로 변환하는 함수

import pandas as pd 
df2 = pd.DataFrame( [ [1, 10], [2, 20], [3, 30], [4, 40] ], columns = ['컬럼1', '컬럼2'], index = ['A', 'B', 'C', 'D'] ) 
print(df2.to_html())

.values, .index ,.colums 함수를 이용하여 구성 요소 확인 가능

  • Index 기초

: Index 객체는 Series의 경우에는 각 요소에 대한 ID 역할, DataFrame 경우에는 각 행에 대한 ID 역할
.index 기능 활용하여 인덱스 추출 가능

import pandas as pd 
series = pd.Series([10,20,30,40], index = ['A','B','C','D']) 
print(series.index) 

#Index(['A', 'B', 'C', 'D'], dtype='object')

: Index 객체는 순서가 있는 집합처럼 작동하여 집합 연산도 지원!

import pandas as pd 
series1= pd.Series([10, 20, 30, 40], index = ['A', 'B', 'C', 'D']) 
series2= pd.Series([50, 60, 70, 80], index = ['C', 'D', 'E', 'F']) 
print('합집합=', series1.index | series2.index) 
print('교집합=', series1.index & series2.index) 

#(['C', 'D'])

: 데이터를 추가하거나 삭제하고, index를 이용해서 이를 확인 가능

: Series에 인덱스와 함께 데이터를 추가하는 방법
series['E'] = 50 #인덱스 E의 값으로 숫자50 추가

: drop 함수 이용, 데이터 삭제하는 방법
series = series.drop('B') #인덱스 B의 데이터를 삭제
drop() 함수의 경우 지정된 index의 값이 삭제된 series를 복제하여 리턴하기 때문에 = 를 사용하여 series 변수 갱신해줘야함.

[Series]

import pandas as pd 
series = pd.Series([10,20,30,40], index = ['A','B','C','D']) 
print('생성 직후=', series.index) 

#생성 직후= Index(['A', 'B', 'C', 'D'], dtype='object') 

series['E'] =50 
print('데이터 추가=', series.index) 
#데이터 추가= Index(['A', 'B', 'C', 'D', 'E'], dtype='object') 

series = series.drop('B') 
print('B의 값 삭제 후=', series.index) 
#B의 값 삭제 후= Index(['A', 'C', 'D', 'E'], dtype='object')

[DataFrame]

import pandas as pd 
df = pd.DataFrame( [ [1,10], [2,20], [3,30], [4,40] ], columns=['A','B'], index = ['a','b','c','d'] ) 
print(df.index) 

#Index(['a', 'b', 'c', 'd'], dtype='object')
import pandas as pd 
df1 = pd.DataFrame({'A':[1, 2, 3], 'B':[4, 5, 6]}, index = [1, 2, 3]) 
df2 = pd.DataFrame({'A':[4, 5, 6], 'B':[7, 8, 9]}, index = [2, 3, 4]) 
print('합집합=', df1 .index | df2 .index) 
print('교집합=', df1 .index & df2 .index)

: DataFrame에 인덱스와 함께 행 데이터 추가하는 방법
- 인덱스 d의 값으로 [7,8] 추가 => df.loc['d']=[7,8]

: DataFrame 에서 drop 함수로 데이터 삭제 하는 방법
axis = 0 (행), axis = 1(열) 삭제할 것인지를 지정해줌 - 생략 가능!
- 인덱스 b의 행을 삭제 => df = df.drop('b',axis=0)
- 컬럼 A의 열을 삭제 => df = df.drop('A',axis=1)

import pandas as pd 
df = pd.DataFrame( [ [1, 10], [2, 20], [3, 30], [4, 40] ], columns = ['열1', '열2'], index = ['행A', '행B', '행C', '행D'] ) 
print('생성 직후=',df .index) 

df.loc['행E'] = [5,50] 
print('행 데이터 추가 후=',df.index) 

df= df.drop('행B',axis=0) 
print('행B의 행 삭제 후=',df.index)