코딩못하는사람

pandas 모듈 Series,DataFrame 본문

머신러닝,마이닝

pandas 모듈 Series,DataFrame

공부절대안함 2020. 10. 19. 20:35

1.1 pandas 자료구조

1.1.1Data Series

 obj2 = pd.Series([4, 7, -5, 3], index=['d', 'b', 'a', 'c']) (인덱스 선언을 하지않으면 0부터 차례대로 설정됨)

obj

d 4

b 7

a -5

c 3

dtype: int64

 

obj.indexobj.values로 인덱스 모음과 값들을 볼 수 있음.

inedx=Index(['d', 'b', 'a', 'c'], dtype='object')

values=[ 4 7 -5 3]

 

1차원 데이터이므로 인덱스에 접근해서 데이터를 사용할 수 있다.

obj2['d'] = 6

values=[6,7,-5,3]

 

Series는 고정길이의 정렬된 사전형 색인값에 데이터 값을 매핑 하고 있기때문에, 파이썬의 사전형과 비슷하다.

print(obj2[obj2 > 0])

d 6

b 7

c 3

print(obj2 * 2)

d 12

b 14

a -10

c 6

딕셔너리 형과 비슷하므로 in을 쓸 때 key의 값으로 접근한다

'b' in obj2==>True

'f' in obj2 ==>False

 

파이썬의 Dictionary 타입을 Series로 변형가능하다.

sdata = {'Ohio': 35000, 'Texas': 71000, 'Oregon': 16000, 'Utah': 5000}

obj3 = pd.Series(sdata)

Ohio 35000

Texas 71000

Oregon 16000

Utah 5000

 

원하는 인덱스로 데이터를 바꿀 수 있지만 데이터가 없는 새로운 인덱스를 설정하면 NaN값으로 설정된다.

states = ['California', 'Ohio', 'Oregon', 'Texas']

obj4 = pd.Series(sdata, index=states)   (캘리포니아값은 없었음)

California NaN

Ohio 35000.0

Oregon 16000.0

Texas 71000.0

 

NaN+숫자의 값은 NaN이 된다.(한쪽에만 있었으면 NaN이 된다는 뜻과 같음)

name 속성을 이용하여 시리즈 데이터에 이름 index.name 속성으로 시리즈의 인덱스에도 이름을 선언가능하다.

 

1.1.2 DataFrame

DataFrame은 스프레드 시트 형식의 자료구조이고 여러개의 컬럼이 있는데 각 컬럼 은 서로 다른 종류의 값(숫자, 문자열, 불리언)을 담을 수 있다.

frame예시 1) 사전형으로 만든값을 순서대로 출력하는 방법

data = {'state': ['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada', 'Nevada'],

'year': [2000, 2001, 2002, 2001, 2002, 2003],

'pop': [1.5, 1.7, 3.6, 2.4, 2.9, 3.2]}

frame = pd.DataFrame(data)

  state year pop

0 Ohio 2000 1.5

1 Ohio 2001 1.7

2 Ohio 2002 3.6

3 Nevada 2001 2.4

4 Nevada 2002 2.9

5 Nevada 2003 3.2

 

frame2 = pd.DataFrame(data, columns=['year', 'state', 'pop', 'debt'], index=['one', 'two', 'three', 'four', 'five', 'six'])

다음과 같이 data를 넣고 columns와 인덱스를 선언해주어도 된다. 여기서 중요한 점은 columns에는 없는 값을 선언해주면 NaN이 되면서 오른쪽 세로로 한줄 추가되지만 index에 없는 값을 넣어주면 에러가 뜬다.

columns값과 index값으로 접근하기

columns의 값으로 접근하는것에는 두가지 방법이 있다

frame2['year'] # 사전 형식 frame2.year #속성 형식 둘다 같은 값을 뽑아낸다.

 

index로 접근할때는 loc과 iloc이 있다. 

loc으로 접근하는 방법은 인덱스 이름을 따라간다

iloc의 경우는 우리가 배열접근에서 흔히쓰는 몇변째 배열로 접근한다는 뜻이다.

예를들어 위의 frame2에 'two'의 인덱스에 접근한다고하자.

loc을 활용하면 frame2.loc['two']이고 iloc을 활용하면 두번째 배열이므로 frame2.iloc[1]이 될것이다.(0,1,2,3,4~순)

 

새로운 columns를 추가할 때 원하는 인덱스에만 값을 넣는 것과 다른 칼럼의 조건을 boolean형태로 판단하여 넣을 수 도 있다.

val = pd.Series([-1.2, -1.5, -1.7], index=['two', 'four', 'five'])

frame2['debt'] = val  #새로운 'debt 칼럼을 만들되 val인덱스와 값에 맞는 부분만 넣고 나머지 NaN

frame2['eastern'] = frame2.state == 'Ohio' #'eastern을 만들고 state가 ohio인곳만 True, 나머지는 False로 만든다.

 

del을 이용하여 columns 삭제가 가능하다. T로 전치도 가능.

 

 

중첩된 사전을 DataFrame에 넘기면 바깥에 있는 사전의 키는 컬럼이 되고 안에 있는 키는 로우가 된다.

pop = {'Nevada': {2001: 2.4, 2002: 2.9}, 'Ohio': {2000: 1.5, 2001: 1.7, 2002: 3.6}}

frame3 = pd.DataFrame(pop)

     Nevada Ohio

2001 2.4 1.7

2002 2.9 3.6

2000 NaN 1.5

 

1.1.3 색인 객체 (Index Objects)

색인 객체는 변경 불가능

파이썬의 집합과는 달리 pandas의 인덱스는 중복 값을 허용.

 

 

 

'머신러닝,마이닝' 카테고리의 다른 글

pandas 모듈 (2)  (0) 2020.10.20
numpy모듈(2) 실습  (0) 2020.09.28
Perceptron 신경망  (1) 2020.09.18
Numpy모듈  (1) 2020.09.17
Comments