OO하는 데이터분석가

[파이썬]판다스(pandas)로 행,열,행렬 가져오기

흔흔 2021. 1. 2. 00:09

이전 글(2020/12/21 - [OO하는 데이터분석가] - [파이썬]으로 데이터 분석하기, 판다스(pandas) 기초2)에서는 데이터프레임에서 하나하나의 값들을 변경하는 방법을 알아보았었다. 말미에 열을 뽑아오는 방법을 소개했었는데, 오늘 거기에 덧붙여 행과 행렬(데이터프레임)형태로 추출하는 방법까지 알아보려고 한다. 이전 글에서 계속 사용하던 예제를 이어서 사용하려고 한다.

 

데이터프레임 data에 아래 데이터를 지정했다고 치자.

회차 이름 구매일 무게 구매처
1 복숭아 2021-01-01 0.3 슈퍼마켓
2 딸기 2021-01-02 0.2 과일가게
3 아보카도 2021-01-03 0.4 슈퍼마켓
4 딸기 2021-01-04 0.5 과일가게
5 토마토 2021-01-05 0.4 과일가게
6 아보카도 2021-01-06 0.7 슈퍼마켓
7 포도 2021-01-07 0.1 과일가게

 

컬럼을 가져오는 가장 간단한 방법은 아래와 같다.

 

한개의 열(column) 추출하기

data["무게"]

결과

회차 

1 0.3

2 0.2

3 0.4

4 0.5

5 0.4

6 0.7

7 0.1

Name: 몸무게, dtype: float64

 

 

2개 이상의  열을 추출하기

파이썬에서 판다스를 이용하여 칼럼을 두개이상 가져오고싶을때는 아래와 같이 작성한다.

첫번째 코드의 경우 대괄호의 사용에서 혼란이 발생하는 경우가 많기때문에, 리스트를 생성하여 컬럼들을 추출하는 방법을 추천한다.

#컬럼 여러개 추출하기
data[["구매일","무게"]]

#columns라는 리스트 생성
columns = ["구매일", "몸무게"]
data[columns]

결과

회차 구매일 무게

1 2021-01-01 0.3

2 2021-01-02 0.2

3 2021-01-03 0.4

4 2021-01-04 0.5

5 2021-01-05 0.4

6 2021-01-06 0.7

7 2021-01-07 0.1

 

행(row)을 추출하기

판다스의 'index'가 row를 가져오는 기준이다. 예제 데이터에서는 '회차'를 의미한다. 

row를 가져오고싶을때는 loc를 쓴다. loc의 의미는 locate이다.

data.loc[3]

결과

이름 아보카도

구매일 2021-01-03

무게 0.4 

구매처 슈퍼마켓

Name: 3, dtype: object

 

2개 이상의 행을  추출하기

기본적으로는 여러 열을 가져오는 방법과 동일하다. 마찬가지로 리스트를 이용하는 방법을 추천한다. 두가지 방법을 같은 결과를 반환한다.

#행 여러개 추출하기
data.loc[[1,3,7]]

#ids라는 리스트 생성
ids = [1,3,7]
data.loc[session_ids]

결과

회차 이름 구매일 무게 구매처
1 복숭아 2021-01-01 0.3 슈퍼마켓
3 아보카도 2021-01-03 0.4 슈퍼마켓
7 포도 2021-01-07 0.1 과일가게

 

다음은 연달아있는 여러 행을 가져오는 방법에 대해 알아보겠다. 기본적으로는 list의 slicing이랑 비슷하다. (0:4면 0번째부터 4번째의 직전까지로 생각, 그래서 0,1,2,3해서 4개가 나옴) 같은 원리로 그래서 1:6이면 원래대로 0,1,2,3,4,5 나와야된다고 생각할 수 있지만, 이건 말그대로 회차의 숫자를 넣는거라고 봐주면 된다. (결론: 파이썬의 슬라이싱이랑 다르다)

#1회차부터 7회차
data.loc[1:7]

결과

회차 이름 구매일 무게 구매처
1 복숭아 2021-01-01 0.3 슈퍼마켓
2 딸기 2021-01-02 0.2 과일가게
3 아보카도 2021-01-03 0.4 슈퍼마켓
4 딸기 2021-01-04 0.5 과일가게
5 토마토 2021-01-05 0.4 과일가게
6 아보카도 2021-01-06 0.7 슈퍼마켓

 

 

행과 열을 같이 추출하기

방식1은 가장일반적인 방식을 나타낸다. loc[행번호][열이름]의 형태로 적어주는 방식이다. 하지만 이 방식으로 쓰는 것은 추천하지 않는다.

왜냐하면 대괄호를 몇번 열고 닫았느냐가 실행의 기준이 된다. 그래서 이경우 한줄이지만 두번 실행되었다고 생각한다.

그래서 방식2를 추천한다. 동일결과를 얻기위해 드는 시간차이가 많이 나게 된다. 방식2가 훨씬 빠르다.

#방식1
data.loc[1]["이름"] 


#방식2 
data.loc[index,colums]

결과

'복숭아'

 

+추가) 코드의 실행 속도를 알고 싶다면? %time 

이처럼 코드 앞에 %time 을 붙이면 실행에 소요되는 시간이 나온다.

%time data.loc[1]["이름"]

결과

CPU times: user 562 µs, sys: 0 ns, total: 562 µs Wall time: 569 µs

'복숭아'

 

 

여러개의 행들과 열들을 추출하기

loc를 이용하여 여러개의 행과 여러개의 열을 교차하여 추출할 수 있다. 마찬가지로 이 경우도 리스트를 변수로 지정하는 이용하는 방법을 추천한다.

#행정보, 열정보를 리스트처럼 구성
data.loc[[1,3,7],["이름","구매일","무게"]]

#리스트를 변수로 지정해서 추출
ids = [1,3,7]
columns = ["이름","구매일","무게"]

data.loc[ids,columns]

결과

회차 이름 구매일 무게
1 복숭아 2021-01-01 0.3
3 아보카도 2021-01-03 0.4
7 포도 2021-01-07 0.1

 

행과열을 지정하여 1개의 값을 추출하는 방법 .at

at을 이용하면 행과열을 같이 추출할 수 있다. 장점은 속도가 아주 빠르다는 것이다. 단점은 1개의 값만 가져올수있다는 것이다. 결론적으로 잘 쓰이지는 않는다.

data.at[1,"이름"]

결과

'복숭아'

 

 

이렇게 여러개의 행과열, 그리고 이를 교차해 데이터값(행렬)을 추출하는 방법까지 알아보았다.  간단히 정리하자면 아래와 같을것이다.

 

열 추출 : ["변수명"]

행 추출 : loc[행번호]

행렬 추출 : loc[[행번호],["변수명"]]

 

loc의 경우 행을 추출할 때, 행렬을 추출할 때 모두 사용되므로 헷갈리기 쉽고 주의가 필요하다!

 

이전 글 :

2020/12/16 - [OO하는 데이터분석가] - [파이썬]으로 데이터 분석하기, 판다스(pandas) 기초

반응형