본문 바로가기
파이썬/Pandas

pandas 데이터 선택 selection

by Nov19 2019. 8. 9.
반응형

판다스에서 행이나 열을 선택하는 방법

데이터는 기상자료개방포털에서 서울시 기후 데이터를 다운받아

data.csv로 파일명을 바꾸고 해당 소스가 있는 폴더에 넣어 사용

 

pandas의 read_csv("파일명.csv") csv파일에서 데이터를 가져와 DataFrame을 반환한다.

인코딩 형식의 오류가 발생했을 때는 encoding 인자에 인코딩 형식을 넣어준다.

우리나라 공기관에서 데이터를 받아 저장했을 경우 인코딩 형식이 "CP949" 일 수 있다.

import pandas as pd
df = pd.read_csv("./data.csv", encoding='utf-8')
df.head()
	지점번호	지점명	일시	평균기온	평균최고기온	최고기온	최고기온일자	평균최저기온	최저기온	최저기온일자
0	108	서울	09-Jan	-2.0	2.3	12.2	2009-01-30	-5.5	-11.4	2009-01-24
1	108	서울	09-Feb	2.9	6.8	16.1	2009-02-13	-0.6	-8.6	2009-02-17
2	108	서울	09-Mar	6.0	10.6	22.2	2009-03-21	1.8	-3.3	2009-03-14
3	108	서울	09-Apr	12.7	18.0	25.8	2009-04-19	8.1	2.2	2009-04-01
4	108	서울	09-May	19.1	24.3	31.0	2009-05-28	14.6	9.8	2009-05-05

head(숫자) 위에서부터 "숫자" 만큼의 데이터만 출력해준다.

숫자를 넣지 않으면 기본 5개 출력

 

df.column명 으로 해당 column만 가져올 수 있다.

df.평균기온.head(3)
0   -2.0
1    2.9
2    6.0
Name: 평균기온, dtype: float64

딕셔너리같이 키값으로 가져올수도 있으며 여러개를 지정할 때는 반드시 대괄호 2개 사용

df[["지점명","일시","평균기온"]].head()
	지점명	일시	평균기온
0	서울	09-Jan	-2.0
1	서울	09-Feb	2.9
2	서울	09-Mar	6.0
3	서울	09-Apr	12.7
4	서울	09-May	19.1

다음과 같이 데이터의 row 갯수를 선택할 수 있다.

df[["지점명","일시","평균기온"]][:5]
지점명	일시	평균기온
0	서울	09-Jan	-2.0
1	서울	09-Feb	2.9
2	서울	09-Mar	6.0
3	서울	09-Apr	12.7
4	서울	09-May	19.1

넘파이를 근간으로 하기 때문에 넘파이에서 사용하는 형식을 다 사용할 수 있다.

df[0:3]
	지점번호	지점명	일시	평균기온	평균최고기온	최고기온	최고기온일자	평균최저기온	최저기온	최저기온일자
0	108	서울	09-Jan	-2.0	2.3	12.2	2009-01-30	-5.5	-11.4	2009-01-24
1	108	서울	09-Feb	2.9	6.8	16.1	2009-02-13	-0.6	-8.6	2009-02-17
2	108	서울	09-Mar	6.0	10.6	22.2	2009-03-21	1.8	-3.3	2009-03-14

iloc을 사용하면 지정한 범위의 row 를 가져올 수 있다.

df.iloc[0:3]
	지점번호	지점명	일시	평균기온	평균최고기온	최고기온	최고기온일자	평균최저기온	최저기온	최저기온일자
0	108	서울	09-Jan	-2.0	2.3	12.2	2009-01-30	-5.5	-11.4	2009-01-24
1	108	서울	09-Feb	2.9	6.8	16.1	2009-02-13	-0.6	-8.6	2009-02-17
2	108	서울	09-Mar	6.0	10.6	22.2	2009-03-21	1.8	-3.3	2009-03-14

df.iloc[row범위 : column범위]로 지정할 수도 있다.

df.iloc[0:5,1:4]	
	지점명	일시	평균기온
0	서울	09-Jan	-2.0
1	서울	09-Feb	2.9
2	서울	09-Mar	6.0
3	서울	09-Apr	12.7
4	서울	09-May	19.1

특정 조건을 주고 선택할 수 있다.

데이터프레임 역시 넘파이에서 사용하는 방식을 동일하게 사용가능하다.

df[df["최고기온"]>20].head()
	지점번호	지점명	일시	평균기온	평균최고기온	최고기온	최고기온일자	평균최저기온	최저기온	최저기온일자
2	108	서울	09-Mar	6.0	10.6	22.2	2009-03-21	1.8	-3.3	2009-03-14
3	108	서울	09-Apr	12.7	18.0	25.8	2009-04-19	8.1	2.2	2009-04-01
4	108	서울	09-May	19.1	24.3	31.0	2009-05-28	14.6	9.8	2009-05-05
5	108	서울	09-Jun	22.4	26.7	32.4	2009-06-27	18.8	14.3	2009-06-01
6	108	서울	09-Jul	24.3	28.2	32.4	2009-07-16	21.0	18.7	2009-07-10

drop()은 데이터프레임에서 데이터를 제거

완전히 제거하는 것은 아니고 원본은 그대로두고 제거한 데이터프레임을 반환한다.

df.drop(1).head()
	지점번호	지점명	일시	평균기온	평균최고기온	최고기온	최고기온일자	평균최저기온	최저기온	최저기온일자
0	108	서울	09-Jan	-2.0	2.3	12.2	2009-01-30	-5.5	-11.4	2009-01-24
2	108	서울	09-Mar	6.0	10.6	22.2	2009-03-21	1.8	-3.3	2009-03-14
3	108	서울	09-Apr	12.7	18.0	25.8	2009-04-19	8.1	2.2	2009-04-01
4	108	서울	09-May	19.1	24.3	31.0	2009-05-28	14.6	9.8	2009-05-05
5	108	서울	09-Jun	22.4	26.7	32.4	2009-06-27	18.8	14.3	2009-06-01

column명을 사용하여 제거할 수도 있고, 이때 axis=1 을 꼭지정해야 한다.

따지면 골치아프니 그냥 axis=1 지정..ㅜㅜ

여러개를 한꺼번에 지정해서 제거하려면 리스트를 넣는다.

df.drop(["지점명","일시","평균기온"], axis=1).head()

df.drop("지점명", axis=1).head()
	지점번호	일시	평균기온	평균최고기온	최고기온	최고기온일자	평균최저기온	최저기온	최저기온일자
0	108	09-Jan	-2.0	2.3	12.2	2009-01-30	-5.5	-11.4	2009-01-24
1	108	09-Feb	2.9	6.8	16.1	2009-02-13	-0.6	-8.6	2009-02-17
2	108	09-Mar	6.0	10.6	22.2	2009-03-21	1.8	-3.3	2009-03-14
3	108	09-Apr	12.7	18.0	25.8	2009-04-19	8.1	2.2	2009-04-01
4	108	09-May	19.1	24.3	31.0	2009-05-28	14.6	9.8	2009-05-05
반응형

'파이썬 > Pandas' 카테고리의 다른 글

Pandas 시리즈 series 생성 및 기본  (0) 2019.08.09

댓글