Numpy/Pandas 기초 학습 - 03 Pandas 심화 알아보기

핏자·2023년 4월 12일
0

인공지능사관학교

목록 보기
15/31
post-thumbnail
  • 조건으로 검색하기

조건으로 검색하기

Numpy array와 마찬가지로 masking 연산이 가능하다

import numpy as np
import pandas as pd

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

조건에 맞는 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)]
df.query("A < 0.5 and B > 0.3")

문자열이라면 다른 방식으로도 조건 검색이 가능하다

df["Animal"].str.contains("cat")
df.Animal.str.match("cat")



  • 함수로 데이터 처리하기

- 함수로 데이터 처리하기

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

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

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"] = ''
df.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["get_preprocess_phone"] = df["phone"].apply(get_preprocess_phone)

replace: apply 기능에서 데이터 값만 대체 하고 싶을때

df.Sex.replace({"Male": 0, "Female": 1})
df.Sex.replace({"Male": 0, "Female": 1}, inplace=True)



  • 그룹으로 묶기

- 그룹으로 묶기

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

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.groupy.groupby.DataFrameGroupny object at 0x10e3588>
df.groupby('key').sum()
df.groupby(['key','data1']).sum()

- aggregate

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

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

- filter

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

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

- apply

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

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

- get_group

groupby로 묶인 데이터에서 key값으로 데이터를 가져올 수 있다

df = pd.read_csv("./univ.csv")
df.head()
df.groupby("시도").get_group("충남")
len(df.groupby("시도").get_group("충남")) # 94



  • Multilndex & pivot_table

Multilndex

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

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,2),
    columns=[["A","A","B","B"],["1","2","1","2"]]
)

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

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

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

- pivot_table

데이터에서 필요한 자료만 뽑아서 새롭게 요약,

분석할 수 있는 기능 엑셀에서의 피봇 테이블과 같다


index는 행 인덱스로 들어갈 key

column에 열 인덱스로 라벨링될 값

value에 분석할 데이터


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

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







  • 실습문제1. 피리부는 사나이를 따라가는 아이들

    피리부는 사아니를 따라가는 어린이들중 남자 어린이와 여자 어린이의 평균 연령을 표로 출력

    쥐와 아이들의 정보는 the_pied_piper_of_hamelin.csv 파일에 저장되어 있다

    • 피리부는 사나이 데이터에서 아이들만 골라내는데 마스킹 연산을
    • 피리부는 사나이를 따라간 아이들의 일차별 연령을 계산하는데 groupby 함수를
    • 아이들의 일차별 연령을 성별로 나누어 표로 출력하는데 pivot table을 이용하여라
import pandas as pd
import numpy as np


# 파일을 읽어서 코드를 작성해보세요
# 경로: "./data/the_pied_piper_of_hamelin.csv"
import pandas as pd
import numpy as np


# 파일을 읽어서 코드를 작성해보세요
# 경로: "./data/the_pied_piper_of_hamelin.csv"
df = pd.read_csv("./data/the_pied_piper_of_hamelin.csv")
print(df, "\n")

df = df.loc[df['구분']=='Child']
print(df, "\n")

x = df.groupby('일차').mean()
print(x, "\n")

y = df.pivot_table(
    index='일차', columns='성별', values='나이',
    aggfunc = np.mean
)
print(y, "\n")
>>> #y값만
>>>성별    Female      Male
>>>일차                    
>>>3   9.500000  9.000000
>>>4   9.000000  6.333333
>>>5   8.666667  8.833333
>>>6   9.411765  7.846154 
profile
개발자 핏자의 로그들

0개의 댓글