여러 기본 메소드를 익히긴 했지만 새로 배우고 잘 까먹는 메소드를 다시 한 번 정리해보자.
import pandas as pd
import seaborn as sns
df = sns.load_dataset("titanic")
df.head()
df.T
✅ sort_counts()
# column 별 값의 분포를 확인할 때 사용합니다.
df['who'].value_counts()
df['who'].value_counts(ascending=True) # 오름차순정렬
df['who'].value_counts(normalize=True) # 비율구하기
df['age'].value_counts(bins=3, sort=False) # 연속형 자료를 이산형 자료로 변환 후 개수 확인. 3개 구간으로 범주화.
# '()'는 미포함, '[]'는 포함.
df['age'].value_counts(bins=[0, 20, 40, 60, 100], sort=False) # 연속형 자료를 사용자 지정 구간으로 Binning
✅ sort_values()
df.sort_values(by='age').head()
#오름차순 정렬
df.sort_values(by='age', ascending=False).head()
#여러개 컬럼 정렬
df.sort_values(by=['fare', 'age'], ascending=[False, True]).head()
✅ indexing / slicing / 조건 필터링
df.loc[0, 'class'] # indexing 예시
df.loc[2:5, 'class':'deck'].head() # slicing 예시 (slicing은 [시작(포함): 끝(포함)])
df.loc[:6, 'class':'deck'] #6행까지 열 지정
✅ 조건필터링
# 조건1 정의
cond1 = (df['fare'] > 30)
# 조건2 정의
cond2 = (df['who'] == 'woman')
df.loc[cond1 & cond2] # 또는 -> |
✅ iloc : loc과 유사하지만 index만 허용
df.iloc[[0, 3, 4], [0, 1, 5, 6]] # Fancy Indexing
df.iloc[:3, :5] # Slicing
✅ isin : 포함여부
sample = pd.DataFrame({'name': ['kim', 'lee', 'park', 'choi'],
'age': [24, 27, 34, 19]
})
condition = sample['name'].isin(['kim', 'lee']) # loc를 활용한 조건 필터링으로도 찰떡궁합입니다.
sample.loc[condition]
#풀이1
con1 = tips['day'] == 'Fri'
con2 = tips['day'] == 'Sat'
con3 = tips['tip'] < 10
tips[(con1 | con2)& con3][['total_bill', 'tip', 'smoker', 'time']].head(10)
#풀이2
con1 = tips['day'].isin(['Fri', 'Sat'])
con2 = tips['tip'] < 10
tips.loc[con1&con2][['total_bill', 'tip', 'smoker', 'time']].head(10)