Pandas - DataFrame
빈칸, NaN 안에 값을 직접 넣기
.fillna()
- .fillna() 를 사용하고, argument를 넣어주면, 위에 DataFrame의 NaN이 argument로 들어간 값을 출력하는 것을 볼 수 있다
특정 행에 NaN 대신 값을 넣고 싶을 때
- 행을 인덱스로 가지고 오고 .fillna() 를 사용한다
- 이렇게 하면, series로 반환해서, series 안에 있는 NaN을, 입력한 값으로 바꿔준다
- 하지만 위와 같이 할 경우, DataFrame에는 NaN를 특정 값으로 바꾼 것이 적용이 안 되었다
- 4번 열의 College 행을 보면 NaN을 볼 수 있다
nba["College"] = nba["College"].fillna("Unknown")
# nba["College"].fillna("Unknown", inplace=True)
- DataFrame까지 변경을 시키려면, series를 만들고, 그 series를 해당 행에 덮어주면 된다
- inplace 를 사용해도 된다 (하지만, inplace는 없어질 수도 있다)
astype 메서드
데이터의 값의 타입을 다른 타입으로 반환해주는 메서드다
- 예) int 에서 string으로 바꾸기
판다의 특성상, 행의 데이터 중에 NaN이 하나라도 있을 수도 있어, 숫자로 된 모든 값은 float로 출력된다
- .astype() 같은 경우 NaN이 있으면 에러가 발생한다
- 23번 줄 : .hasnans
- NaN이 해당 행에 있는지 확인한다 (Boolean으로 출력)
- 29번 줄 : 해당 행의 데이터 타입을 int 로 바꿔주고, nba["Age"] 행에 덮어준다
- 먼저 series를 만들어서, series 안에 있는 float들을 int로 바꿔준다
- 그리고 그 series를 nba["Age"] 행에 덮어주는 것이다
만약에 Salary 행 또는 College 행처럼 NaN이 있으면, .fillna() 를 통해, 기본 값을 설정하고, .astype()을 사용해야 한다
astype("category")
DataFrame의 메모리를 줄일 때 유용하다
- 성별, MBTI, 혈액형 같이 DataFrame에 비해 중복적으로 많이 나오는 데이터가 있을 때에 사용할 수 있다
- Out [52] : "Position" 행에 대한 유니크한 데이터가 5개 밖에 없는 것을 출력해준다
- 즉 PG, SF, SG, PF, C 를 카테고리로 묶어서 메모리를 줄인다
- .astype("category")를 사용하기 전의 메모리다
- nba["Position"].astype("category")
- series로 반환하고, category라는 데이터 타입으로 바꾼 것을 볼 수 있다
- nba["Position"] = nba["Position"].astype("category")
- category 데이터 타입으로 바꾼 series를 DataFrame의 nba["Position"] 행에 덮어 씌운다
- 데이터 타입에는 category 가 1이 추가된 것을 볼 수 있고, 메모리도 전보다 2KB가 줄어든 것을 볼 수 있다
- 해당 DataFrame은 데이터가 400개 이상이지만, 데이터 개수가 훨씬 더 많아지면, 메모리가 조금이라도 줄어들면 더 빠르게 DataFrame에 접근할 수 있다
'Skill Stacks > 데이터분석_Python' 카테고리의 다른 글
13_Pandas - DataFrame (0) | 2023.05.04 |
---|---|
11_Pandas - DataFrame (0) | 2023.05.02 |
10_Pandas - DataFrame (0) | 2023.05.01 |
9_Pandas - Series (0) | 2023.04.29 |
8_Pandas - Series (0) | 2023.04.28 |