pandas 데이터 선택 selection

파이썬/Pandas|2019.08.09 18:31

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

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

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 데이터 선택 selection  (0) 2019.08.09
Pandas 시리즈 series 생성 및 기본  (0) 2019.08.09

댓글()