티스토리 뷰

개발공부/🎅 Python

[Python] Pandas 심화 알아보기

2022. 9. 27. 19:33

1️⃣  조건으로 검색하기

 

데이터 프레임에서 각 컬럼마다 조건을 충족하는 값만 추출할 수 있다.

Numpy의 마스킹 연산처럼 조건식을 직접 쓸 수도 있고, query() 함수를 이용하는 방법도 있다.

 

 

 

1)  masking 연산

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(5, 2), columns=["A", "B"])
df["A"] < 0.5

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

2)  조건에 맞는 DataFrame row 추출

import numpy as np
import pandas as pd

df = pd.DataFrame(np.random.rand(5, 2), columns=["A", "B"])

# 마스킹 연산
df[(df["A"] < 0.5) & (df["B"] > 0.3)]

# query()
df.query("A < 0.5 and B > 0.3")

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

3)  문자열 조건 검색

df["Animal"].str.contains("Cat")

df.Animal.str.match("Cat")

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

 

 

2️⃣  함수로 데이터 처리하기

 

apply를 통해서 함수로 데이터를 다룰 수 있다.

df = pd.DataFrame(np.arange(5), columns=["Num"])
def square(x):
    return x**2
df["Num"].apply(square)

# lambda 표현식으로
df["Square"] = df.Num.apply(lambda x: x ** 2)

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

예시)

df = pd.DataFrame(columns=["phone"])

df.loc[0] = "010-1234-1235"
df.loc[1] = "공일공-일이삼사-1235"
df.loc[2] = "010.1234.일이삼오"
df.loc[3] = "공1공-1234.1이3오"
df["preprocess_phone"] = ''

def get_preprocess_phone(phone):
    mapping_dict = {
        "공": "0",
        "일": "1",
        "이": "2",
        "삼": "3",
        "사": "4",
        "오": "5",
        "-": "",
        ".": "",
    }
    
    for key, value in mapping_dict.items():
        phone = phone.replace(key, value)
    return phone
    
df["preprocess_phone"] = df["phone"].apply(get_preprocess_phone)

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

replace()

 

apply 기능에서 데이터 값만 대체

df.Sex.replace({"Male": 0, "Female": 1})
# Male은 0,  Female은 1로 변경 / series데이터 반환

df.Sex.replace({"Male": 0, "Female": 1}, inplace=True) 
# inplace=Ture 하면 series데이터를 반환하지 않고 df를 바로 수정한다.

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

 

 

3️⃣  그룹으로 묶기

 

간단한 집계를 넘어서서 조건부로 집계하고 싶은 경우,

groupby()를 통해 그룹으로 묶고 sum(), min()등으로 조건부 집계가 가능하다.

 

 

 

 

groupby()

 

키 값을 기준으로 그룹 생성

df = pd.DataFrame({'key': ['A', 'B', 'C', 'A', 'B', 'C'],
    'data1': [1, 2, 3, 1, 2, 3], 
    'data2': np.random.randint(0, 6, 6)
})

df.groupby('key')	# <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x10e3588>

df.groupby('key').sum()
df.groupby(['key','data1']).sum()

 

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

 

aggregate()

 

:  groupby를 통해서 집계를 한번에 계산하는 방법

df.groupby('key').aggregate([min, np.median, max])
df.groupby('key').aggregate({'data1': min, 'data2': np.sum})

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

💡  agregate 메소드에 함수를 매개변수로 넣어줄 때,

min, max, mean, count 등의 특정 함수들은 문자열 형태로 넘겨줄 수 있다.

df.groupby('key').aggregate([min, np.median, max])

df.groupby('key').aggregate(['min', np.median, 'max'])

 

 

 

 

 

filter()

 

:  groupby를 통해서 그룹 속성을 기준으로 데이터 필터링

def filter_by_mean(x):
    return x['data2'].mean() > 3
    
df.groupby('key').mean()
df.groupby('key').filter(filter_by_mean)

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

apply()

 

:  groupby를 통해서 묶인 데이터에 함수 적용

df.groupby('key').apply(lambda x: x.max() - x.min())

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

get_group()

 

:  groupby로 묶인 데이터에서 key값으로 데이터 추출

df = pd.read_csv("./univ.csv")

df.head()
df.groupby("시도").get_group("충남")

len(df.groupby("시도").get_group("충남"))	# 94

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

 

4️⃣  MultiIndex & pivot_table

 

 

MultiIndex

 

-  인덱스를 계층적으로 만들 수 있다.

df = pd.DataFrame(
    np.random.randn(4, 2), 
    index=[['A', 'A', 'B', 'B'], [1, 2, 1, 2]],
    columns=['data1', 'data2']
)

 

 

 

-  열 인덱스도 계층적으로 만들 수 있다.

df = pd.DataFrame(
    np.random.randn(4, 4),
    columns=[["A", "A", "B", "B"], ["1", "2", "1", "2"]]
)

 

 

 

-  다중 인덱스 컬럼의 경우 인덱싱은 계층적으로 한다.

df["A"]
df["A"]["1"]

 

 

-  인덱스 탐색의 경우에는 loc, iloc를 사용 가능하다.

 

 

 

 

 

 

pivot_table

 

데이터에서 필요한 자료만 뽑아서 새롭게 요약, 분석 할 수 있는 기능

(=  엑셀에서의 피봇 테이블)

 

-  Index  :  행 인덱스로 들어갈 key

-  Column  :  열 인덱스로 라벨링될 값

-  Value  :  분석할 데이터

 

 

예시1)  타이타닉 데이터에서 성별과 좌석별 생존률 구하기

 

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

df.pivot_table(
    index='sex', columns='class', values='survived',
    aggfunc=np.mean
)

 

 

예시2)

df.pivot_table(index="월별", columns='내역', values=["수입", '지출'])

이미지출처 : 엘리스 파이썬으로 시작하는 데이터 분석 - Pandas 심화 알아보기 강의자료

 

 

 

 

 


 이 글은 엘리스의 AI트랙 5기 강의를 들으며 정리한 내용입니다.

반응형
프로필사진
개발자 삐롱히

프론트엔드 개발자 삐롱히의 개발 & 공부 기록 블로그