Pandas Part 4. 심화
카테고리: Basic
조건으로 검색하기
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)]
# or
df.query('A < 0.5 and B > 0.3')
조건으로 검색하기
df['Animal'].str.comtains('Cat')
df.Animal.str.math('Cat')
함수로 데이터 처리하기
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)
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)
replace: apply 기능에서 데이터 값만 대체 하고 싶을 때
df.Sex.replace({"Male": 0, "Female": 1})
df.Sex.repalce({"Male": 0, "Female": 1}, inplace=True)
그룹으로 묶기
간단한 집계를 넘어서서 조건부로 집계하고 싶은 경우
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()
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("충남")
ln(df.groupby("시도").get_group("충남"))
# 94
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']]
)
다중 인덱스 컬럼의 경우 인덱싱은 계층적으로 한다.
- 인덱스 탐색의 경우에는 loc, iloc를 사용가능하다
df['A'] df['A']['1']
pivot_table
- 데이터에서 필요한 자료만 뽑아서 새롭게 요약
- 분석 할 수 있는 기능 엑셀에서의 피봇 테이블과 같다.
- Index : 행 인덱스로 들어갈 key
- Column: 열 인덱스로 라벨링될 값
- Value : 분석할 데이터
# aggfunc의 Default는 np.mean
df.pivot_table(
index='sex', columns='class', values='survived', aggfunc=np.mean
)
df.pivot_table(
index='월별', columns='내역', values=['수입', '지출']
)
댓글 남기기