[DataFrame][데이터분석] 데이터 값 조회
# 라이브러리 임포트 import numpy as np import pandas as pd # 데이터 프레임 생성 data = pd.DataFrame(np.arange(16).reshape((4, 4)), index=['Ohio', 'Colorado', 'Utah', 'New York'], columns=['one', 'two', 'three', 'four'])
# 데이터 프레임 생성 결과
1) 특정 열 조회
data[['three', 'one']]
결과)
2) 특정 조건을 만족하는 값, 인덱싱
(ex: three 열의 값 중 5보다 작은 값을 가지는 인덱스를 조회)
# three열 중 5보다 작은 값을 가지는 인덱스의 값을 조회 data[data['three'] < 5 ]
결과)
위의 결과에 대한 해석)
먼저 data['three'] < 5 부터 조회
data['three'] < 5
결과)
위 결과 Ohio만 True값을 갖으므로 위 식을 그대로 데이터프레임 인덱스 조회하는 자리에 넣으면, Ohio를 조회하라는 코드와 같아짐. 즉, 아래의 의미를 갖음
data[ data['three'] < 5 ] = data['Ohio']
실제로 data['Ohio']는 코드 실행이 되지 않는다. data['Ohio']는 컬럼명이 Ohio인 열의 데이터를 조회하라는 의미이므로, 현 데이터상에는 ohio가 인덱스명으로 존재할 뿐 해당 명으로 컬럼으로 존재하지 않아 당연하게도 에러가 발생한다. 그렇다면 현 상황에서 인덱스가 Ohio인 row의 값을 조회하려면 어떻게 해야할까?
data.loc['Ohio']로 접근하면 된다.
현 데이터가 컬럼명과 인덱스명이 지정되어 있기 때문에 data.loc[행의 인덱스 명, 열의 인덱스 명]으로 적어줘야한다. 인덱스 번호로 작성하면 문법 에러가 발생한다. 인덱스 번호 작성이 안되므로 당연히 인덱스 슬라이싱도 안된다. 만약 인덱스 번호로 행과 열을 조회하고 싶을 경우엔 data.iloc[행의 인덱스 값, 열의 인덱스 값] 으로 조회하면 되며 이때 인덱스 슬라이싱이 가능하다.
데이터 프레임의 row를 조회하는 방법은 크게 두가지가 있다.
loc와 iloc가 그것이다. 문법은 dataFrameName.loc[행이름, 열이름] 또는 dataFrameName.iloc[행인덱스번호, 열인덱스번호]이다. 만약 행이 str로 지정되어있지 않고 인덱스 번호로 지정되어 있다면 슬라이싱이 가능하며 그렇지 않은 경우 loc에서는 인덱스 슬라이싱이 안된다. iloc는 인덱스 번호로 조회하는 것이기 때문에 당연히 인덱스 슬라이싱이 가능하다.
만약 하나의 행에서 여러개의 컬럼을 조회하고 싶을땐,
dataFrameName.loc[ ['조회할행이름1', '조회할행이름2'], ['조회할열이름1', '조회할열이름2'] ]과 같이 시리즈화하여 조회한다.
만약 특정열의 처음부터 끝까지 조회하고 싶은 경우에는,
dataFrameName.loc[ :, '조회할열이름' ] 또는 dataFrameName.loc['조회할열이름'] 으로 조회한다.
(p.s: 참고로 인덱스명으로 데이터프레임 값을 조회하는 loc는 label-location의 약자이고,
인덱스 순서로 데이터프레임 값을 조회하는 iloc는 integer location의 약자이다.)