sliver__

[Pandas 데이터 분석] Chapter 1 - 판다스 입문(1) 본문

CS/Pandas

[Pandas 데이터 분석] Chapter 1 - 판다스 입문(1)

sliver__ 2022. 2. 14. 23:37
728x90

[판다스 자료구조]

  • 분석을 위해 다향한 소스로부터 수집하는 데이터는 형태나 속성이 매우 다양하다.
  • 다른 형식을 갖는 여러 종류의 데이터를 컴퓨터가 이해할 수 있도록 동일한 형식을 갖는 구조로 통합 필요.
  • 판다스 시리즈(Series), DataFrame이라는 구조화된 데이터 형식을 제공
  • Series는 1차원 배열, DataFrame은 2차원 배열이다.

 

[시리즈(Series)]

[시리즈만들기]

  • 데이터가 순차적으로 나열된 1차원 배열의 형태.
  • {Key : value} 의 형태.

  • Dictionary가 Series와 구조가 비슷하기 때문에 변환하는 방법을 많이 사용
  • #Dictionary to Series
    pandas.Series( 딕셔너리 )
     

[인덱스 구조]

  • 인덱스 종류 : 정수형 위치 인덱스, 인덱스 이름
import pandas as pd

list_data = ['2019-01-02', 3.14, 'ABC', 100, True]
sr = pd.Series(list_data)
print(sr)

idx = sr.index
val = sr.values
print(idx)
print('\n')
print(val)
0    2019-01-02
1          3.14
2           ABC
3           100
4          True
dtype: object
RangeIndex(start=0, stop=5, step=1)


['2019-01-02' 3.14 'ABC' 100 True]

 

[원소 선택]

  • 인덱스를 사용하여 시리즈의 원소를 선택
  • 하나의 원소 선택 또는 여러 원소를 한꺼번에 선택도 가능
  • 인덱스를 이름으로 접근할 때 "", ''로 접근 가능
  • Series api에 index옵션을 사용하면 인덱스 이름을 지정가능
  • dtype = object는 문자열이다
import pandas as pd

tup_data = ('영인', '2010-05-01', '여', True)
sr = pd.Series(tup_data, index=['이름', '생년월일', '성별', '학생여부'])
print(sr)

print(sr[0])
print(sr['이름'])
idx = sr.index
values = sr.values
print(idx)
print('\n')
print(values)
print('\n')
print(sr[0:2])
print('\n')
print(sr[[0,2]])
print('\n')
print(sr[[1,2]])
print(sr[['생년월일', '이름']])

#여러 개의 원소를 선택(인덱스 범위 지정)
print(sr[1:2])
print('\n')
print(sr['생년월일' : '성별'])
이름              영인
생년월일    2010-05-01
성별               여
학생여부          True
dtype: object
영인
영인
Index(['이름', '생년월일', '성별', '학생여부'], dtype='object')


['영인' '2010-05-01' '여' True]


이름              영인
생년월일    2010-05-01
dtype: object


이름    영인
성별     여
dtype: object


생년월일    2010-05-01
성별               여
dtype: object
생년월일    2010-05-01
이름              영인
dtype: object
생년월일    2010-05-01
dtype: object


생년월일    2010-05-01
성별               여
dtype: object

 

[데이터프레임]

  • 2차원 배열
  • 여러 개의 시리즈들이 모여서 데이터프레임을 이루는 구조
  • 데이터프레임의 열은 시리즈 객체

  • 열은 공통의 속성을 갖는 일련의 데이터
  • 행은 개별 관측대상에 대한 속성 데이터들의 모임인 record
#딕셔너리 -> 데이터프레임
pandas.DataFrame( 딕셔너리 객체 )
import pandas as pd

dict_data = {'c0':[1,2,3], 'c1':[4,5,6], 'c2':[7,8,9], 'c3' : [10,11,12], 'c4' : [13,14,15]}
df = pd.DataFrame(dict_data)

print(type(df))
print('\n')
print(df)
    c0  c1  c2  c3  c4
0   1   4   7  10  13
1   2   5   8  11  14
2   3   6   9  12  15

 

[행 인덱스/열 이름 설정]

#행 인덱스 / 열 이름 설정
pandas.DataFrame(2차원 배열, index = 행 인덱스 배열, columns = 열 이름 배열)
import pandas as pd

df = pd.DataFrame([[15, '남', '덕영중'], [17, '여', '수리중']], index=['준서', '예은'], columns=['나이', '성별', '학교'])
print(df)
index = df.index
col = df.columns
print('\n')
print(index)
print('\n')
print(col)
나이 성별   학교
준서  15  남  덕영중
예은  17  여  수리중


Index(['준서', '예은'], dtype='object')


Index(['나이', '성별', '학교'], dtype='object')
  • 리스트를 원소로 가지는 딕셔너리는 리스트가 열로 변환되지만 2차원 배열의 리스트는 행으로 변환된다.
#행 인덱스 변경
DataFrame 객체.index = 새로운 행 인덱스 배열
DataFrame 객체.columns = 새로운 열 이름 배열
df.index = ['학생 1', '학생 2']
df.columns = ['연령', '남녀', '소속']
print(df)
연령 남녀   소속
학생 1  15  남  덕영중
학생 2  17  여  수리중

 

# 행 인덱스 변경 
# rename은 새로운 객체 return, 원본 객체 유지 시 inplace = True로 설정
DataFrame 객체.rename (index = {기존 인덱스 : 새로운 인덱스}, inplace = ...)
DataFrame 객체.rename (columns = {기존 인덱스 : 새로운 인덱스}, inplace = ...)
import pandas as pd

df = pd.DataFrame([[15, '남', '덕영중'], [17 , '여', '수리중']], index=['준서', '예은'], columns=['나이', '성별', '학교'])
print(df)
print('\n')
print("id : ", id(df))
df.rename(columns={'나이':'연령', '성별':'남녀', '학교':'소속'}, inplace=True)
df.rename(index={'준서':'학생 1', '예은':'학생 2'},inplace=True)
print(df)
print("id : ", id(df))
    나이 성별   학교
준서  15  남  덕영중
예은  17  여  수리중


id :  4413159744
      연령 남녀   소속
학생 1  15  남  덕영중
학생 2  17  여  수리중
id :  4413159744

 

[행/열 삭제]

# 행 삭제
# inplace : 객체 유지 여부
DataFrame 객체.drop(행 인덱스 또는 배열, axis = 0, inplace = ...)
DataFrame 객체.drop(열 이름 또는 배열, axis = 1, inplace = ...)
import pandas as pd

exam_data = {'수학' : [90,80,70], '영어' : [90,80,70], '음악' : [90,80,70], '체육' : [90,80,70]}
df = pd.DataFrame(exam_data, index=['서준', '우현', '인아'])
print(df)
print('\n')

df2 = df[:]
df2.drop('서준', axis=0,inplace=True)
print(df2)
print('\n')

df3 = df[:]
print(id(df3))
print('\n')
df3 = df3.drop(['우현','인아'],axis=0)
print(df3)
print(id(df3))
    수학  영어  음악  체육
서준  90  90  90  90
우현  80  80  80  80
인아  70  70  70  70

    수학  영어  음악  체육
우현  80  80  80  80
인아  70  70  70  70


4376995152


    수학  영어  음악  체육
서준  90  90  90  90
4746464896
import pandas as pd

exam_data = {'수학' : [90,80,70], '영어' : [90,80,70], '음악' : [90,80,70], '체육' : [90,80,70]}
df = pd.DataFrame(exam_data, index=['a','b','c'])
print('id : ', id(df))
print(df)
print('\n')

df2 = df[:]
df2.drop(['수학','영어'],axis=1,inplace=True)
print('id : ', id(df2))
print(df2)
print('\n')

df3 = df[:]
df3 = df3.drop('체육', axis=1)
print('id : ', id(df3))
print(df3)
print('\n')
id :  4536413296
   수학  영어  음악  체육
a  90  90  90  90
b  80  80  80  80
c  70  70  70  70

id :  4562290912
   음악  체육
a  90  90
b  80  80
c  70  70


id :  4830397056
   수학  영어  음악
a  90  90  90
b  80  80  80
c  70  70  70

 

[행 선택]

구분 loc iloc
탐색 대상 인덱스 이름 정수형 위치 인덱스
범위 지정 ['a' : 'c'] -> c 포함 [3:7] -> 7 포함X

 

[열 선택]

# 열 1개 생성(시리즈)
DataFrame 객체['열 이름']
DataFrame 객체.'열 이름'

# 열 n개 선택(데이터프레임 생성)
DataFrame 객체 [ [열1, 열2, ..., 열 n]]

Reference : 파이썬 머신러닝 판다스 데이터 분석

728x90
Comments