pandas 기본 메소드(T, sorting, 인덱싱, 슬라이싱, 필터링)

김수경·2024년 3월 27일

파이썬

목록 보기
8/9

여러 기본 메소드를 익히긴 했지만 새로 배우고 잘 까먹는 메소드를 다시 한 번 정리해보자.

타이타닉 데이터

  • 불러오기
import pandas as pd 
import seaborn as sns

df = sns.load_dataset("titanic")
df.head()
  • T : 행과 열을 자리를 바꿈
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]

연습문제

  • tips 데이터셋 중 day가 금요일(Fri), 토요일(Sat) 만 필터링 합니다.
  • tip이 $10보다 적게 낸 데이터만 필터링합니다.
  • 컬럼은 total_bill, tip, smoker, time만 출력합니다.
  • 상위 10개 행만 출력합니다.
#풀이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) 
profile
잘 하고 있는겨?

0개의 댓글