본문 바로가기

IT/codeit

[Codeit] DataFrame 다루기

사용하고 있는 환경은 Anaconda Navigator 의 Jupyter

근데 사실 코드잇에는 창 안에 강의 부분과 실행기 부분이 따로 있어서 바로 코딩해서 테스트 가능.


2022.11.15(화)

드디어 긴 회피를 멈추고 마주한 data science 공부..


1. Data Frame 인덱싱
02 ~ 04 방송사 시청률 받아오기

loc : 위치 찾는 메소드(location)
예를 들어, df.loc['A', 20] 이라고 치면 행 이름이 A, 열 이름이 20인 위치를 찾아서 데이터값을 출력한다.
df.loc[:, 'A] 에서 : 는 '모든' 을 의미해서 A열의 모든 행들의 값을 다 출력한다.
df.loc[:,('A','B')] 는 열이 A 혹은 B 인 모든 행들의 값을 다 출력한다.

-
05 카드사 고객 분석

import pandas as pd

samsong_df = pd.read_csv('data/samsong.csv')
hyundee_df = pd.read_csv('data/hyundee.csv')

samsong_df = samsong_df.rename(columns={'문화생활비':'samsong'})
hyundee_df = hyundee_df.rename(columns={'문화생활비':'hyundee'})
df = pd.merge(left = samsong_df, right = hyundee_df, how = "left", on = '요일')
df = df.rename(columns={'요일':'day'})
df.loc[: , ('day','samsong','hyundee')]

>> 기억할 것 : df를 변형시키고 나서 다시 df로 저장하지 않으면 날아감
rename : df 열 이름 변경
문법은 새로운df = 바꿀df.renme(columns = {'이전 이름' : '바꿀 이름'})
merge : df끼리 병합
문법은 새로운df = pd.merge(left = 왼쪽df명, right = 오른쪽df명, how = "어떤 방식으로", on = '병합의 기준이 되는 열 이름')

-
07 ~ 10 방송사 시청률 받아오기

df.loc[2012:2017,'KBS':'SBS'] 처럼 ##:## 형식으로 리스트 슬라이싱 가능

iphone_df.loc[[True, False, True, True, False, True, False]]
이렇게 Boolean index를 적용해서 0,2,3,5번째 행만 출력할 수도 있다.

그런데 강의에서와는 다르게 나는
iphone_df.loc[[True, False, False, True]]
이렇게 df 행의 총 수인 7 보다 적은 boolean값을 주면
IndexError : Boolean index has wrong length : 4 instead of 7 이라고 뜨더라. 뭐지?
강의에서는 적은 값의 boolean을 주면 나머지 뒤의 값들이 다 False로 적용된댔는데,, 쩝

iphone_df['디스플레이'] > 5
이렇게 하면 디스플레이라는 열에 해당하는 값이 5보다 큰 애들은 True, 작은 애들은 False 로 출력된다.

여러가지 조건으로 구분할 땐, 각 조건을 소괄호 ( ) 로 묶는다.
(iphone_df['디스플레이'] > 5) & (iphone_df['Face ID'] == 'Yes')
이렇게 하면 전자와 후자를 모두 충족시키는 것들만 True 라고 출력된다.

(iphone_df['디스플레이'] > 5) | (iphone_df['Face ID'] == 'Yes')
이렇게 하면 전자와 후자 중 하나라도 충족시키는 것들이 True 라고 출력된다.

df.loc[df['SBS'] < df['TV CHOSUN'], ['SBS','TV CHOSUN']]
위 코드에서 df['SBS'] < df['TV CHOSUN'] 는 행을 선별하는 조건으로 쓰여서 행의 자리에 있는 것이다.

-
11 Data Frame 위치로 인덱싱하기

iloc : 순서로 위치 찾는 메소드(integer location)
iphone_df.iloc[2,4] 는 2번째 행, 4번째 열에 해당하는 값 출력(0번째부터 시작)
iphone_df.iloc[[1,3],[1,4]] 는 1,3번째 행, 2,4번째 열에 해당하는 df 출력
iphone_df.iloc[3:,1:4] 는 3번째 행부터 끝까지, 1번째 열부터 3번째 열까지에 해당하는 df 출력(1:4에서 4는 빼는 것)


-
2. 데이터 변형하기
01 ~ 02 Data Frame에 값 쓰기

iphone_df.loc['iPhone 8', '메모리'] = '2.5GB' 이렇게 하면 값을 할당하는 것이다.
iphone_df.loc['iPhone 8'] = ['2016-09-22', '4.7', '2GB', 'iOS 11.0', 'NO'] 는 'iPhone 8' 라는 행의 값을 다 바꾸는 것
iphone_df['디스플레이'] = ['4.7 in', '5.5 in', '4.7 in', '5.5 in', '5.8 in', '5.8 in', '6.5 in'] 는 '디스플레이' 열의 값을 다 바꾸는 것
iphone_df['Face ID'] = 'Yes' 는 'Face ID' 에 해당하는 값을 전부 Yes로 바꿔주는 것이다.

-
03 Data Frame에 값 추가/삭제

추가
iphone_df.loc['iPhone XR'] = ['2018-10-26', 6.1, '3GB', 'iOS 12.0.1', 'Yes'] 에서 'iPhone XR' 라는 행이 없으면 새로 생성됨.
iphone_df['제조사'] = 'Apple' 에서 '제조사'라는 열이 없으면 새로 생성됨.

삭제
drop : 행/열/값 삭제
문법은 df명.drop('삭제할 행/열 이름', axis='index(row)/colmns', inplace=True/False)
>> 기억할 것 : drop 명령은 대괄호[ ] 가 아닌 소괄호 ( ) 를 써야한다.
iphone_df.drop('iPhone XR', axis='index', inplace=False) 라고 쓰면 iPhone XR이라는 index(=row)가 삭제되는데
이 때, inplace=False 임으로 기존의 df는 변형하지 않은 채로 출력된다.
inplac=True 로 바꿔서 명령하면 기존의 df가 변형되어 저장된다.

-
05 index/column 설정하기

index : 인덱스 이름을 정해주는 메소드
예를 들어, liverpool_df.index.name = 'Player Name' 이렇게 하면 0번째 열에 해당하는 인덱스가 Player Name이 됨.

set_index : 인덱스 열을 다른 열로 바꿔주는 메소드
liverpool_df.set_index('Number') 이렇게 하면 Number열이 index열(0번째 열)이 되는 대신, 기존 index열은 날라감.
그러므로 기존 index열을 따로 남겨두고 index열을 다른 열로 변경해야 한다.
예를 들어, liverpool_df['Player Name'] = liverpool_df.index 이렇게 하고 set_index를 하면 된다.


-
2022.11.16(수)

3. 큰 데이터 다루기
01 큰 Data Frame 살펴보기

head : df의 첫 몇 줄을 보여줌 ex) df이름.head(3)
tail : df의 끝 몇 줄을 보여줌 ex) df이름.tail(3)
shape : df의 크기를 보여줌 ex) df이름.shape
columns : df의 열 이름들을 보여줌 ex) df이름.columns
info : df의 (각 열별)정보를 보여줌 ex) df이름.info
describe : df의 특징을 보여줌 ex) df이름.describe 는 평균값, 최소, 최대, 갯수 등을 보여줌

laptops_df.sort_values(by='price') 는 df를 가격이 작은 것부터 정렬시킴
laptops_df.sort_values(by='price', ascending=False) 는 가격이 큰 것부터 정렬
laptops_df.sort_values(by='price', ascending=False, inplace=True) 는 기존 df에 적용

02 큰 Series 살펴보기
laptops_df['brand'] 하면 brand열들의 값이 추출되는데 이 때,
laptops_df['brand'].unique() 라고 하면 겹치는 값을 제외하고 추출됨
laptops_df['brand'].value_counts() 는 값들의 갯수(값별 몇 개씩 나오는지) 출력됨
laptops_df['brand'].describe() 는 Series에 대한 정보가 추출됨

'IT > codeit' 카테고리의 다른 글

[Codeit] DataFrame 다루기 - 코드잇 대학교  (0) 2023.05.17