# 데이터 불러오기
import pandas as pd
uriage_data=pd.read_csv("C:/Users/chois/파이썬 기초/파이썬 분석 예제/2장/uriage.csv")
uriage_data.head()
↓ 상품명 오류를 없앤 후의 데이터
# 데이터에 결측값 확인하기
uriage_data.isnull().any(axis=0)
isnull() 을 통해서 결측치 확인 가능!
any() 함수는 괄호 안의 경우가 어느 하나라고 참이면 True를 반환하고 그렇지 않으면 False를 반환한다. 괄호 안의 경우가 단일의 경우만을 의미하는 경우에는 error가 나오므로, 괄호 안의 경우를 복수의 경우로 만들어주어야 한다. *리스트 컴프리헨션처럼 for문을 이용하여 해당 경우를 순환시킬 수 있다.
* axis=0 : 세로결합 -> 결과가 세로로 결합되어 나타난다.
(axis=1 : 가로결합)
# 결측치 수정하기
flg_is_null=uriage_data["item_price"].isnull()
for trg in list(uriage_data.loc[flg_is_null, "item_name"].unique()):
price = uriage_data.loc[(~flg_is_null)&(uriage_data["item_name"] == trg), "item_price"].max()
uriage_data["item_price"].loc[(flg_is_null)&(uriage_data["item_name"]==trg)]=price
uriage_data.head()
flg_is_null=uriage_data["item_price"].isnull()
item_price 중 결측치가 있는 곳을 flg_is_null에 저장한다.
for trg in list(uriage_data.loc[flg_is_null, "item_name"].unique()):
uriage_data라는 df에서 행 이름이 flg_is_null이고, 열 이름이 item_name 인 조건의 중복되지 않는 unique 데이터를 추출하여 리스트 형태로 만들어서 trg에 저장.
즉, 결측치가 있는 item_name을 중복되지 않게 추출.
price = uriage_data.loc[(~flg_is_null)&(uriage_data["item_name"] == trg), "item_price"].max()
for 문에 이어지는 문장이므로 tap 들여쓰기.
uriage_data에서 행 이름이 (~flg_is_null)이면서(item_name이 trg와 같은) 행이고
열 이름이 item_price인 데이터의 최대값을 price라고 한다.
=>'결측치가 있는 상품'과 같은 상품이며 금액이 올바르게 입력된 행을 loc로 찾고, 그 금액을 가져온다.
(~flg_is_null) 에서 ~는 부정연산자라고 하며, flg_is_null==False 와 같다.
uriage_data["item_price"].loc[(flg_is_null)&(uriage_data["item_name"]==trg)]=price
매출 이력의 item_price 칼럼에서 loc()로 결측치가 있는 데이터를 추출하고, 앞에서 가져온 금액 데이터 price를 결측치에 대입합니다.
uriage_data.head()
반복문 처리가 끝나면, 수정 후 매출 이력 처음 5행을 표시합니다.
특정 위치 값(범위도 가능)을 획득하거나 바꿀 때 사용
loc()
특정구간 : df.loc[ '행이름':'행이름', '열이름': '열이름'], 기본식 : df.loc['행이름', '열이름'], 열만 : df.loc[:, '열이름']
iloc()
특정구간 : df.iloc[ 행번호:행번호, 열번호:열번호] , 기본식 : df.iloc['행번호', '열번호'], 열만 : df.loc[:, '열번호']
'Phython > pandas' 카테고리의 다른 글
matplotlib() (2) | 2023.06.13 |
---|---|
groupby(), groups.func() (0) | 2023.06.12 |
데이터 프레임 합치기 concat(), merge(), join (0) | 2023.06.06 |