데이터 불러오기
mport seaborn as sns
import pandas as pd
dia = sns.load_dataset('diamonds')
오름차순 정렬
dia.sort_values('carat')
내림차순 정렬
dia.sort_values('carat', ascending = False)
기준 컬럼이 2개 이상 - 앞 컬럼부터 순서대로 정렬의 기준이 됨
display(dia.sort_values(['carat', 'price']))
display(dia.sort_values(['price', 'carat']))
2개 이상의 컬럼도 정렬 기준을 다르게 둘 수 있음
dia.sort_values(['carat', 'price'], ascending = [False, True])
선택한 컬럼의 클래스별 개수확인
dia.value_counts('cut')
기준컬럼으로 그룹화
cut_gr = dia.groupby('cut')
그룹화된 결과 출력
for i,j in ps_gr:
print(i,j)
특정 그룹에 해당하는 데이터만 추출
cut_gr.get_group('Premium')
기준컬럼 2개 이상 그룹화
cut_gr = dia.groupby(['cut', 'color'])
기준컬럼 2개 이상일 때 특정 그룹에 해당하는 데이터만 추출
cut_gr.get_group(('Premium','G'))
그룹화 이후 특정 통계치를 보고싶은 경우 (agg() 함수)
dia.groupby('cut', observed=True).agg(price_sum=('price', 'sum'))
# 여러 통계치 한번에 추출
dia.groupby('cut', observed=True).agg(price_sum=('price', 'sum'),
price_mean=('price', 'mean'),
price_std=('price', 'std'),
carat_max=('carat', 'max'),
carat_sum=('carat', 'sum'),
color_count=('color', 'count'))
# 특정 함수 만들어 적용
def min_max(x):
return x.max()- x.min()
dia[['color','carat','price','depth']].groupby('color', observed=True).agg(min_max)
여러 응용 가능
dia.groupby('color', observed=True)['price'].mean()
qcut()
하이퍼파라미터 | 설명 | 예시 |
---|---|---|
x | 분위수에 따라 구간을 나눌 데이터. 시리즈 또는 배열 형태로 입력 가능 | x = [1, 2, 3, 4, 5] |
q | 데이터를 나눌 구간 수(분위수). 예를 들어, 4로 설정하면 4분위수로 나눔 | q=4 |
labels | 각 구간에 붙일 이름. 만약 False로 설정하면 구간의 인덱스만 반환 | labels=['A', 'B', 'C', 'D'] |
retbins | True로 설정하면 구간의 경계값도 함께 반환 | retbins=True |
precision | 구간 경계값의 소숫점 자릿수를 설정 | precision=2 |
duplicates | 구간 경계값이 중복될 경우 처리 방법을 설정 (e.g., 중복된 경계값을 제거) | duplicates='drop' |
cut()
하이퍼파라미터 | 설명 | 예시 |
---|---|---|
x | 일정한 간격으로 구간을 나눌 데이터. 시리즈 또는 배열 형태로 입력 가능 | x = [1, 2, 3, 4, 5] |
bins | 구간의 경계값을 명시하거나 구간의 개수를 설정 | bins=3 or bins=[0, 2, 4, 6] |
labels | 각 구간에 붙일 이름. 만약 False로 설정하면 구간의 인덱스만 반환 | labels=['Low', 'Medium', 'High'] |
precision | 구간 경계값의 소숫점 자릿수를 설정 | precision=1 |
right | 구간의 오른쪽 경계를 포함할지 여부(True: 오른쪽 경계를 포함) | right=True |
include_lowest | 첫 번째 구간에 가장 낮은 값도 포함할지 여부(True: 가장 낮은 값을 첫 번째 구간에 포함) | include_lowest=True |
데이터 만들기
import numpy as np
data = np.random.randn(100)
data
분위수로 나누기 - qcut
res_qcut = pd.qcut(data, q=5, labels=['매우낮음', '낮음', '중간', '높음', '매우높음'])
res_qcut
고정된 값의 구간 나누기 - cut
res_cut=pd.cut(data, bins=5, labels=['매우낮음', '낮음','중간','높음','매우높음'])
res_cut
# 함수 정의
def calc_carat_size(carat):
if carat >= 1:
return "크다"
elif carat >= 0.5:
return "중간크기"
else:
return "작다"
dia['carat_size'] = dia['carat'].apply(calc_carat_size)
dia.assign(korean_price = lambda x : x['price'] * 1000)
같은 표현
dia['korean_price'] = dia['price'] * 1000
concat()
merge()
예시 데이터 생성
test1 = pd.DataFrame({
'과일종류': ['사과', '바나나', '포도', '딸기', '오렌지'],
'가격': [1000, 1500, 2000, 2500, 1800]
})
test2 = pd.DataFrame({
'과일종류': ['사과', '바나나', '포도', '딸기', '수박'],
'수량': [50, 100, 150, 200, 300]
})
행을 기준으로 단순히 병합
pd.concat([test1, test2], axis=0)
열을 기준으로 단순히 병합
pd.concat([test1, test2], axis=1)
과일종류를 기준으로 inner join
pd.merge(test1, test2, on='과일종류', how='inner')
과일종류를 기준으로 outer join
pd.merge(test1, test2, on='과일종류', how='outer')