Pandas Part 4. 심화

Date:     Updated:

카테고리:

태그:

조건으로 검색하기

masking 연산

import numpy as np
import pandas as pd

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

image


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

image


조건으로 검색하기

df['Animal'].str.comtains('Cat')
df.Animal.str.math('Cat')

image


함수로 데이터 처리하기

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

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

image


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"] = ''

image


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)

image


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

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

image


그룹으로 묶기

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

df = pd.DateFrame({
    "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. ~~~~ >
df.groupby('key').sum()
df.groupby(['key', 'data1']).sum()

image


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

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

image


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

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

image


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

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

image


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

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

image


MultiIndex & pivot_table

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

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

image


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

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

image


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

  • 인덱스 탐색의 경우에는 loc, iloc를 사용가능하다
    df['A']
    df['A']['1']
    

    image


pivot_table

  • 데이터에서 필요한 자료만 뽑아서 새롭게 요약
  • 분석 할 수 있는 기능 엑셀에서의 피봇 테이블과 같다.
  • Index : 행 인덱스로 들어갈 key
  • Column: 열 인덱스로 라벨링될 값
  • Value : 분석할 데이터 image


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

image


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

image





Basic 카테고리 내 다른 글 보러가기

댓글 남기기