[Pandas] Pandas 자료형_Series, Data Frame, Index
#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)