[Pandas] 데이터 인덱싱 및 선택 - cheat sheet🔥

Jaeyoung·2022년 10월 20일
0
post-thumbnail

목표 설정

  • Pandas Cheat Sheet 에서 Sebset 부분 학습하기
  • 학습 부분
    • Subset Observations - rows
    • Subset Variables - columns
    • Subsets - rows and columns

Indexing

  • 데이터프레임(DataFrame) 에서 특정한 데이터만 골라내는 것을 인덱싱(indexing) 이라고 한다.
  • 실습에 사용할 Dataset : df = sns.load_dataset("mpg")
mpgcylindersdisplacementhorsepowerweightaccelerationmodel_yearorigin
018.08307.0130.0350412.070usa
115.08350.0165.0369311.570usa
218.08318.0150.0343611.070usa
316.08304.0150.0343312.070usa
417.08302.0140.0344910.570usa

행(row)

📍특정 조건에 맞는 행 가져오기

  • 기본 구조
df[df.컬럼명 + 조건]
  • 적용해 보기
df[df.mpg > 16]
mpgcylindersdisplacementhorsepowerweightaccelerationmodel_yearorigin
018.08307.0130.0350412.070usa
218.08318.0150.0343611.070usa
417.08302.0140.0344910.570usa
  • 알아두기
    • 조건식을 여러개 사용할 수 있음
    # mpg 값이 15보다 크고 horsepower가 150보다 큰 경우의 데이터 가져오기
    df[(df["mpg"]>15)&(df["horsepower"]>150)]
    • & : 교집합 (and), | : 합집합 (or)

📍중복 제거(drop_duplicates)

  • 기본 구조
df.drop_duplicates(subset=[컬럼명], keep={'last' , 'first' 또는 False})
  • 적용해 보기
df.drop_duplicates(subset=['mpg', 'cylinders'])
mpgcylindersdisplacementhorsepowerweightaccelerationmodel_yearorigin
018.08307.0130.0350412.070usa
115.08350.0165.0369311.570usa
316.08304.0150.0343312.070usa
417.08302.0140.0344910.570usa
  • 알아두기
    • 중복제거한 것은, 변수에 할당해주지않으면 저장이 안됨
    • subset 에 넣어준 컬럼을 기준으로 중복 제거
    • keep을 작성하지 않으면 중복제거 시, default 값인 'first' 첫 번째 요소를 남기고 나머지 제거
      • 'first': 중복 시, 첫 번째 요소만 남기기
      • 'last' : 중복 시, 마지막 요소만 남기기
      • False : 중복 시, 남김없이 제거

📍특정 데이터 불러오기

상위 n개 데이터 불러오기

df.head(n) : n 작성안할 시, default 값인 5로 실행

하위 n개 데이터 불러오기

df.tail(n) : n 작성안할 시, default 값인 5로 실행

n개 데이터 랜덤으로 불러오기

df.sample(n) : n 작성안할 시, default 값인 1로 무작위로 데이터 반환

전체 데이터의 특정비율로 랜덤 데이터 불러오기

df.sample(frac=n) : 0<=n<=1 로 작성 (0 입력 시, 데이터 반환X, 1 입력 시, 전체 데이터 반환)

특정 컬럼의 값이 가장 큰 데이터 n개 불러오기

df.nlargest(n, columns, keep='first') : keep의 default가 'first'이고, 'first', 'last', 'all'을 사용할 수 있음

특정 컬럼의 값이 가장 작은 데이터 n개 불러오기

df.nsmallest(n, columns, keep='first') : keep의 default가 'first'이고, 'first', 'last', 'all'을 사용할 수 있음


열(column)

컬럼 선택하는 방법 : df[컬럼명] or df.컬럼명

📍특정 컬럼들만 뽑아오기

방법 1. df[[컬럼명1, 컬럼명2 ,...]]

방법 2. df.filter(regex='regex')

  • 기본 구조
    df.filter(items, like, regex, axis)
  • 적용해 보기
# 컬럼명으로 가져오기
df.filter(items=['mpg', 'horsepower', 'origin'])
mpghorsepowerorigin
018.0130.0usa
115.0165.0usa
316.0150.0usa
417.0140.0usa
# 정규표현식으로 가져오기 => ^mp : mp로 시작하는!
# axis = 1 (열) axis = 0 (행)
df.filter(regex='^mp', axis=1)
mpg
018.0
115.0
316.0
417.0
# 특정 문자열을 포함하고 있는 컬럼 또는 행으로 가져오기 => del 이 들어간 컬럼
# axis = 1 (열) axis = 0 (행)
df.filter(like='del', axis=1)
model_year
070
170
370
470

행과 열(row and column)

📍위치로 데이터 뽑아오기

  • 기본 구조
df.iloc[] : 행, 열 또는 행-열 불러올 수 있음
  • 적용해 보기
# 특정 행만 가져오기 (행을 0~2까지 가져오기)
df.iloc[:3] 
mpgcylindersdisplacementhorsepowerweightaccelerationmodel_yearorigin
018.08307.0130.0350412.070usa
115.08350.0165.0369311.570usa
218.08318.0150.0343611.070usa
# 특정 열만 가져오기 (열을 1~4까지 가져오기)
df.iloc[:, 1:5] 
cylindersdisplacementhorsepowerweight
08307.0130.03504
18350.0165.03693
28318.0150.03436
38304.0150.03433
48302.0140.03449
# 특정 행, 열에 대한 데이터만 가져오기
df.iloc[:2, 1:5] 
cylindersdisplacementhorsepowerweight
08307.0130.03504
18350.0165.03693
  • 알아두기
    • df.head() => df.iloc[:5] 기능
    • df.tail() => df.iloc[-5:] 기능

📍label로 데이터 뽑아오기

  • 레이블 : 단일 레이블(0 또는 'age'), list/array(['mpg', 'weight']), 슬라이스객체('mpg':'weight')
  • 기본 구조
df.loc[] : 행, 열 또는 행-열 불러올 수 있음
  • 적용해 보기
# 특정 행만 가져오기 (레이블이 2인 행부터 4인 행까지 가져오기)
df.loc[2:4] 
mpgcylindersdisplacementhorsepowerweightaccelerationmodel_yearorigin
218.08318.0150.0343611.070usa
316.08304.0150.0343312.070usa
417.08302.0140.0344910.570usa
# 특정 열만 가져오기 (레이블이 0~2인 행, "mpg" 열)
df.loc[0:2, "mpg"] 
0    18.0
1    15.0
2    18.0
Name: mpg, dtype: float64
# 특정 행-열 가져오기 (dataframe)
df.loc[0:2, ["mpg","cylinders"]]
mpgcylinders
018.08
115.08
218.08
  • 알아두기
    • df.loc 는 조건식을 추가하여 특정 조건에 대한 데이터를 선택해올 수 있음
df.loc[df.mpg < 18, ["horsepower", "weight", "acceleration"]]
horsepowerweightacceleration
1165.0369311.5
3150.0343312.0
4140.0344910.5

참고문헌

profile
데이터 분린이:)

0개의 댓글