Data analysis using python_D9. 16th of Sep, Thu.
by makeany0916_Ch02. 고객별 연간 지출액 예측 - 09. 파이썬 Tip 2. Pandas Indexing
하나의 데이터를 불러오는 것은 쉽다. data['Yearly Amount Spent'] 이것처럼.
하지만 두개 이상 되었을땐, data['Time on App', 'Time on Website'] 이렇게 쓰면 에러가 난다. 왜냐하면 이 대괄호[]의 안에 들어갈 요소는 하나여야 한다. 판다스 데이터 프레임의 인덱싱을 위한 대괄호 안에는 하나의 요소만. 그래서 두개의 요소를 넣으면 작동을 하지 않는다.
아래를 보면 넘파이, 판다스 설명할때 썼던 리스트 형태이다. 두개의 텍스트 덩어리가 들어있는 하나의 리스트가 되는 것이다.
따라서 하나의 리스트이기 때문에 두개가 들어있어도 리스트가 하나여서 판다스 데이터 프레임에서 인덱싱을 할 때 이 두개의 값을 두 개로 인지하지 않고 하나로 받아들인다. 그래서 에러가 안남. 이 두개의 텍스트를 모두 찾아서 컬럼에서 뽑아다가 보여줌.
그렇기 때문에 아무리 뒤에다가 컬럼을 여러개 붙여도 에러가 나지 않는다. 이렇게 말이다.
두 개의 대괄호[[]] 중 안쪽의 대괄호가 하나의 리스트로 묶어주기 때문. 하나의 개체로 된다. 밖의 대괄호는 판다스 데이터 프레임에서 인덱싱을 해주기 위한 대괄호이고 안쪽의 괄호는 이 세개의 텍스트 덩어리를 하나의 묶어주기 위한 리스트로 만든 대괄호이다. 똑같은 대괄호지만 하는 역할이 다르다.
다중컬럼에서 있는 데이터에서 특정컬럼을 빼는 명령어는 drop다. 주의 할 것은 drop의 괄호는 대괄호가 아니다! ()을 사용한다. 그런데 이렇게 하면 에러가 난다. 판다스 데이터 프레임에서 drop이라는 펑션은 이 값을 떨어뜨리긴 할건데 어디서 할거냐면 이 컬럼에서 이름을 찾는게 아니라 행에서 찾는다. 따라서 위의 그림처럼 행은 숫자로 0-499 까지 나열되어 있지 Yearly Amout Spent가 없다. 그래서 에러가 난다.
만약에 행의 숫자를 써서 넣는다면? 그 행이 드랍이 된다. 3을 썼더니 4번째 행의 3이 사라졌다. 행(row)의 이름을 써주면 알아서 잘 찾아서 빼준다.
그러면 어떻게 전체 컬럼을 빼줄 수 있느냐? 컴머를 써준 후 axis = 1 하면 된다. axis = 1은 컬럼이다. axis = 0은 행이다. axis = 2는 없다. drop 펑션의 기본값은 axis = 0이다. 그래서 row에서 찾는 거다. 만약 두개 이상의 컬럼을 드랍하고 싶다면?
이렇게 쓰면 전에 봤던 것과 같이 에러가 난다. 묶으면 괜찮지 않을까? 리스트 형태로 만들어서 말이지?.... 해볼까?
대괄호로 묶어주니 에러가 사라지고 두개의 컬럼이 빠졌다.
데이터 컬럼을 드랍을 하고 나서 데이터를 다시 불러오면 이 두개의 컬럼이 돌아온다. 왜 그럴까?
드랍이라는 펑션을 쓸 때 이 두개의 컬럼을 드랍을 시키되 이 데이터 자체에서 아예 지워버린 상태에서 저장하진 않는다. 단순하게 보여준다. 그래서 데이터라는 이름안에 다시 저장을 하고 싶으면 두가지 방법이 있다. 첫번째는 data = ..... 이런 식으로 할당을 해주는 방식이 있고 아니면 내부 파라미터인 inplace = True를 쓴다. '이걸 대체할께요' 라는 말이다. inplace = False가 기본값이다. False는 굳이 써줄 필요가 없고 바꿔주고 싶을 때만 inplace = True를 쓴다
row를 인덱싱하는 법을 알아보자. 컬럼을 드랍시킬 일은 많지만 특정 row를 드랍시킬 일은 많지 않다. 인덱스 이름을 바꿔보자. 일단 10줄만 df에 저장한다.
인덱스 이름을 바꿀려면 df.index = ['']를 쓴다.
행을 인덱싱하는 방법은 drop처럼 특정한 펑션이 있다. loc이다. 이처럼 시리즈로 뽑힌다.
여러줄을 뽑고 싶다면, 중간에 : 쓴다. 그러면 데이터 프레임 형태로 뽑힌다. d부터 h까지.
이름이 아니라 순서를 인덱싱하는 법은 iloc 이다. loc와 아주 똑같은 데이터가 나온다.
똑같이 3:7하면 5줄이 나올 것 같은데 4줄이 나온다. 마지막 숫자는 포함이 안된다. 판다스 뿐만 아니라 리스트에서도 인덱싱할 때 마지막 숫자는 포함이 안된다. 파이썬에서 :을 가지고 인덱싱을 할 때 마지막 숫자는 포함이 안된다. 행의 이름으로 인덱싱을 할 수도 있고 숫자를 가지고 인덱싱을 할 수도 있다.
:다음을 안쓰면 마지막까지 보여준다.
:뒤에 숫자를 쓰면 앞에걸 모두 보여준다.
아무것도 안써주면 다 불러온다.
이렇게 쓰면 두번째 줄 부터 3번째 줄까지(1,2,3) 세줄이 나오고, 0:3은 앞의 컬럼부터 0, 1, 2까지 세 컬럼값만 보여준다.
만약에 행은 그대로 두고 컬럼을 숫자로 인덱싱하고 싶다면 이걸 응용할 수 있다. 위치를 기반으로 해서 숫자를 넣어서 인덱싱을 하고 싶을땐 컬럼같은 경우에도 iloc를 꼭 써줘야 하고 앞에 행을 컨트롤 할 수 있는 :을 꼭 써야 한다. 약간 복잡하다.
대부분 컬럼 인덱싱을 할 때는 앞에서 한것 처럼 컬럼 이름을 가지고 인덱싱을 한다. 그런데 만약 컬럼 이름이 너무 많다면 이런 식으로 iloc를 써서 위치를 기반으로 인덱싱을 해줄 수 있다.
'Data Analysis & AI > E-commerce Data Analysis' 카테고리의 다른 글
Data analysis using python_D8. 13rd of Sep, Mon. (0) | 2021.09.13 |
---|---|
Data analysis using python_D7. 12nd of Sep, Sun. (0) | 2021.09.12 |
Data analysis using python_D6. 11st of Sep, Sat. (0) | 2021.09.12 |
Data analysis using python_D5. 10th of Sep, Fri. (0) | 2021.09.10 |
Data analysis using python_D4. 9th of Sep, Thu. (0) | 2021.09.09 |
블로그의 정보
막만들자!
makeany