데이터 전처리 & 시각화 강의 내용 정리

seonyoung·2024년 7월 18일
0

📁 slicing & selection

df[['A', 'B']]

#순서 변경 가능 
df[['B', 'A']]

-> 두 개의 컬럼을 가져올 땐 리스트의 형태로 한 번 더 [ ]로 묶어줘야 함
-> loc를 통해서도 동일한 결과 값을 가져올 수 있음

📁 boolean indexing

<남성만 가져오기>

df[(df['sex'] == 'Male') & (df['smoker'] == 'Yes')]

-> 각 조건을 소괄호 형태로 묶어주고, &(and) 기호를 이용해서 이어 붙여주면 됨

df[(df['sex'] == 'Male') | (df['smoker'] == 'Yes')]

-> 각 조건을 소괄호 형태로 묶어주고, |(or) 기호를 사용해서 이어 붙여주면 됨

<사이즈가 3 초과인 전체 데이터 불러오기>

df.loc[df['size'] > 3, :]

<특정 컬럼만>

df.loc[df['size'] > 3, 'tips' : 'smoker']

📁 isin

<특정 컬럼에서 특정 값만 찾고 싶을 때>

df[df['size'].isin([1, 2])] 

<문자로 변경해서 찾고 싶을 때>

df[df['day'].isin(['sun', 'Thur'])]

<여러 개의 조건이 있을 때 \(역슬래쉬)를 통해 줄 바꿈 가능>
ex)

cond = (df['sex'] == 'Male')\
     & (df['tip'] > 3) \
     & (df['smoker'] == 'Yes')\
     & (df['total_bill'] >=20) \
     & (df['size'] == 4
df[cond]

📁 데이터 추가하기

df['created_at'] = pd.to_datetime(df['created_at'])

-> 두 데이터 타입으로 변환해준 값을 넣고 출력해서 df.info()로 확인해보면 데이터 타입이 변경됨

📁 연산 활용 데이터 만들기

<revenue 컬럼 추가>

df['revenue'] = df['total_bill'] + df['tip']

<tip의 퍼센트를 보고 싶을 때(tip의 차지 비율)>

df['tip_percentage'] = df['tip'] / df['revenue']*100

📁 데이터 병합(concat & merge)

<concat(두 데이터 프레임을 양 옆으로 합치거나 위 아래로 합치는 방법)>

pd.concat([df1, df2, df3], axis = 0).reset_index(drop=True)

-> 위 아래로 합쳐졌고, 정수 값으로 정렬됨
-> axis = 0은 위 아래의 기본 값

df = pd.concat([df1, df2], axis = 1)

-> 양 옆으로 합쳐짐
-> axis = 1은 양 옆의 기본 값

<merge(특정 컬럼을 고려해서 데이터 병합[SQL의 JOIN과 유사])>

pd.merge(df1, df2, on = 'key')

-> 별도 리스트 형태로 묶지 않아도 되지만 순서가 중요
-> on = 'key'는 병합하고자 하는 컬럼의 기준

#SQL의 INNER JOIN과 같음
pd.merge(df1, df2, on = 'key', how = 'inner')

#SQL의 LEFT JOIN과 같음
pd.merge(df1, df2, on = 'key', how = 'left')

#SQL의 RIGHT JOIN과 같음
pd.merge(df1, df2, on = 'key', how = 'right')

#전체 데이터 출력
pd.merge(df1, df2, on = 'key', how = 'outer')

📁 group by(특정 기준에 따라 그룹을 나누고, 이를 기반으로 집계, 변환, 필터링 등을 할 수 있는 메소드)

  • 그룹을 생성하거나 그룹에 어떠한 연산을 수행하거나 결과들을 결합해서 데이터를 바라보는 함수

(데이터 생성)

df = pd.DataFrame({
   'Category' : ['A', 'B', 'A', 'B', 'A', 'B'],
   'Valwe' : [1, 2, 3, 4, 5, 6]
})
df

<카테고리 기준 group by>

#mean() 평균 집계
df.groupby('Category').mean()

#count() 개수
df.groupby('Category').count()

#max() 최대
df.groupby('Category').max()

#min() 최소
df.groupby('Category').min()

#frist() 첫 번째 등장한 애들만 넣는 것
df.groupby('Category').frist()

#agg()
df.groupby('Category').agg(list)
-> value 값이 list 형태로 묶여서 출력

📁 pivot table

pivot = df.pivot_table(index = 'Date', columns = 'Category', values = 'Value', aggfunc = 'sum')

-> Date라는 인덱스 생성
-> 카테고리의 컬럼에 따라 value 값이 합계된 형태로 데이터 구성

📁 데이터 정렬

df.sort_value(by='age', ascending = False)

-> age 컬럼 기준으로 정렬을 하는 것이며, 기본 값은 오름차준으로 정렬됨
-> ascending = False를 입력하면 내림차순으로 정렬

df.sort_index(ascending = False)

-> 인덱스 기준으로도 정렬 가능

profile
원하는 바를 이루고 싶은 사람입니다.

0개의 댓글