yoongrammer

판다스(Pandas) 데이터 선택하기 (Selection) 본문

Data Analysis

판다스(Pandas) 데이터 선택하기 (Selection)

yoongrammer 2023. 2. 19. 20:56
728x90

목차

    판다스(Pandas) 데이터 선택하기 (Selection)


    Pandas는 DataFrame 또는 Series 개체의 특정 부분을 검색하고 조작할 수 있는 다양한 데이터 선택 방법을 제공합니다.

     

    select를 설명하기 위해 사용하는 DataFrame은 다음과 같습니다.

    column label(파란색 블록), row or index label(노란색 블록), data(회색 블록)

    Selecting Columns


    DataFrame에서 열의 하위 집합을 선택하려면 다음 구문을 사용해야 합니다.

    df[column_list]

    • column_list: 선택하려는 열 이름의 목록

    다음은 A행을 가져오는 예입니다.

    df['A']
    # output
    2023-02-18    0.509482
    2023-02-19    0.966399
    2023-02-20    0.857979
    2023-02-21    0.701611
    2023-02-22    0.102038
    2023-02-23    0.507152
    Name: A, dtype: float64

     

    df['A']  or df.A 결과

    df.A와 결과는 동일합니다. 조회 결과는 Series 객체입니다.

     

    다음은 여러 행을 가져오는 예입니다.

    df[['B','D']]
    # output
                       B           D
    2023-02-18	0.943009    0.686995
    2023-02-19	0.547649    0.293321
    2023-02-20	0.899066    0.508288
    2023-02-21	0.220908    0.555901
    2023-02-22	0.677408    0.174801
    2023-02-23	0.320705    0.498722

     

    df[['B', 'D']] 결과

    행 리스트를 사용하면 여러 행의 값을 가져올 수 있습니다. 조회 결과는 DataFrame 객체입니다.

    Selecting Rows


    DataFrame에서 행의 하위 집합을 선택하려면 다음 구문을 사용해야 합니다.

    df[start:stop[:step]]

    • start: 시작 인덱스
    • stop: 종료 인덱스
    • step: 요소 사이의 단계 크기, 기본값은 1이다.

    종료 인덱스는 선택에 포함되지 않습니다.

     

    다음은 0부터 2번째 행을 가져오는 예입니다.

    df[0:3]
    # output
                         B           D
    2023-02-18    0.943009    0.686995
    2023-02-19    0.547649    0.293321
    2023-02-20    0.899066    0.508288
    2023-02-21    0.220908    0.555901
    2023-02-22    0.677408    0.174801
    2023-02-23    0.320705    0.498722
    
    df['2023-02-18':'2023-02-20']
    # output
                        A            B           C           D
    2023-02-18    0.509482    0.943009    0.096876    0.686995
    2023-02-19    0.966399    0.547649    0.465180    0.293321
    2023-02-20    0.857979    0.899066    0.418911    0.508288

     

     

    df[0:3] or df['2023-02-18' : '2023-02-20'] 결과

    df[0:3:1]과 결과는 동일합니다.

    인덱스 대신 인덱스 값을 사용해도 됩니다. df[’2023-02-18’:’2023-02-20’] 이땐 마지막 행도 가져옵니다.

     

    다음은 전체 행에서 2단계식 건너뛰어 행을 가져오는 예입니다.

    df[::2]
    # output
                         A           B           C           D
    2023-02-18    0.509482    0.943009    0.096876    0.686995
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-22    0.102038    0.677408    0.137984    0.174801

     

    df[::2] 결과

    Selection by label


    레이블을 이용하여 선택하는 방법은 DataFrame.loc()와 DataFrame.at()이 있습니다.

     

    loc

    loc은 행 및 열 레이블로 DataFrame, Series에서 데이터를 선택할 수 있는 레이블 기반 인덱싱 방법입니다.

     

    사용 방법은 다음과 같습니다.

     

    DataFrame

    df.loc[row_label [, column_label]]

    • row_label: 선택할 행의 레이블
    • column_label: 선택할 열의 레이블

    시작 레이블과 끝 레이블이 모두 선택 항목에 포함됩니다.

     

    Series

    s.loc[index_label]

    • index_label: 인덱스 레이블

    다음은 loc를 사용하는 여러 가지 예입니다.

     

    행 조회

    # 단일 행 조회
    df.loc['2023-02-20']
    # output
    A    0.857979
    B    0.899066
    C    0.418911
    D    0.508288
    Name: 2023-02-20 00:00:00, dtype: float64
    
    # slice를 이용한 행 조회
    df.loc['2023-02-20':'2023-02-23']
    # output
                        A            B           C           D
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-21    0.701611    0.220908    0.943105    0.555901
    2023-02-22    0.102038    0.677408    0.137984    0.174801
    2023-02-23    0.507152    0.320705    0.988959    0.498722
    
    # list를 이용한 행 조회
    df.loc[['2023-02-20', '2023-02-23']]
    # output
                         A           B           C           D
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-23    0.507152    0.320705    0.988959    0.498722
    
    # boolean을 이용한 행 조회
    df.loc[[False, False, True, False, False, True]]
    # output
                         A           B           C           D
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-23    0.507152    0.320705    0.988959    0.498722

     

     

     

     

     

    열 조회

    # 단일 열 조회
    df.loc[:,'A']
    # output
    2023-02-18    0.509482
    2023-02-19    0.966399
    2023-02-20    0.857979
    2023-02-21    0.701611
    2023-02-22    0.102038
    2023-02-23    0.507152
    Name: A, dtype: float64
    
    # slice를 이용한 열 조회
    df.loc[:,'A':'C']
                         A           B           C 
    2023-02-18    0.509482    0.943009    0.096876
    2023-02-19    0.966399    0.547649    0.465180
    2023-02-20    0.857979    0.899066    0.418911
    2023-02-21    0.701611    0.220908    0.943105
    2023-02-22    0.102038    0.677408    0.137984
    2023-02-23    0.507152    0.320705    0.988959
    
    # list를 이용한 열 조회
    df.loc[:,['B', 'D']]
    # output
                         B           D
    2023-02-18    0.943009    0.686995
    2023-02-19    0.547649    0.293321
    2023-02-20    0.899066    0.508288
    2023-02-21    0.220908    0.555901
    2023-02-22    0.677408    0.174801
    2023-02-23    0.320705    0.498722
    
    # boolean을 이용한 열 조회
    df.loc[:,[False, True, False, True]]
    # output
                         B           D
    2023-02-18    0.943009    0.686995
    2023-02-19    0.547649    0.293321
    2023-02-20    0.899066    0.508288
    2023-02-21    0.220908    0.555901
    2023-02-22    0.677408    0.174801
    2023-02-23    0.320705    0.498722

     

    특정 행과 열 조회

    df.loc[['2023-02-20', '2023-02-23'], 'A':'C']
    # output
                         A           B           C
    2023-02-20    0.857979    0.899066    0.418911
    2023-02-23    0.507152    0.320705    0.988959

     

    df.loc[['2023-02-20', '2023-02-23'], 'A' : 'C'] 결과

    at

    at은 행 및 열 레이블에서 DataFrame, Series의 단일 값을 가져옵니다.

    at은 단일 값에 특화돼 있어 단일 값 접근 시, loc보다 빠릅니다.

     

    사용 방법은 다음과 같습니다.

    DataFrame

    df.at[row_label, column_label]

    • row_label: 선택할 행의 레이블
    • column_label: 선택할 열의 레이블

    Series

    s.at[index_label]

    • index_label: 인덱스 레이블
    df.at[df.index[0], 'B']
    # output
    # 0.943009
    
    s = df.loc[df.index[0]]
    s.at['B']
    # output
    # 0.943009
    df.at[df.index[0], 'B'] or s.at['B'] 결과

    Selection by position


    위치를 이용하여 select하는 방법은 DataFrame.iloc()와 DataFrame.iat()이 있습니다.

     

    iloc

    iloc은 정수 위치를 기반으로 DataFrame, Series에서 데이터를 선택할 수 있는 인덱싱 방법입니다.

    index는 0부터 시작이고 slice에서 마지막 index는 포함되지 않습니다.

     

    사용 방법은 다음과 같습니다.

    DataFrame

    df.iloc[row_index [, column_index]]

    • row_index: 선택할 행의 위치
    • column_index: 선택할 열의 위치

    Series

    s.iloc[index]

    • index: Series에서 선택할 요소의 위치

    다음은 iloc를 사용하는 여러 가지 예입니다.

     

    행 조회

    # 단일 행 조회
    df.iloc[0]
    # output
    A    0.509482
    B    0.943009
    C    0.096876
    D    0.686995
    Name: 2023-02-18 00:00:00, dtype: float64
    
    
    # slice를 이용한 행 조회
    df.iloc[:3]
    # output
                         A           B           C           D
    2023-02-18    0.509482    0.943009    0.096876    0.686995
    2023-02-19    0.966399    0.547649    0.465180    0.293321
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    
    # list를 이용한 행 조회
    df.iloc[[2, 5]]
    # output
                         A           B           C           D
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-23    0.507152    0.320705    0.988959    0.498722
    
    # boolean을 이용한 행 조회
    df.iloc[[False, False, True, False, False, True]]
    # output
                         A           B           C           D
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-23    0.507152    0.320705    0.988959    0.498722

     

    열 조회

    # 단일 열 조회
    df.iloc[:,0]
    # output
    2023-02-18    0.509482
    2023-02-19    0.966399
    2023-02-20    0.857979
    2023-02-21    0.701611
    2023-02-22    0.102038
    2023-02-23    0.507152
    Name: A, dtype: float64
    
    # slice를 이용한 열 조회
    df.iloc[:, 0:3]
                         A           B           C 
    2023-02-18    0.509482    0.943009    0.096876
    2023-02-19    0.966399    0.547649    0.465180
    2023-02-20    0.857979    0.899066    0.418911
    2023-02-21    0.701611    0.220908    0.943105
    2023-02-22    0.102038    0.677408    0.137984
    2023-02-23    0.507152    0.320705    0.988959
    
    # list를 이용한 열 조회
    df.iloc[:, [1,3]]
    # output
                         B           D
    2023-02-18    0.943009    0.686995
    2023-02-19    0.547649    0.293321
    2023-02-20    0.899066    0.508288
    2023-02-21    0.220908    0.555901
    2023-02-22    0.677408    0.174801
    2023-02-23    0.320705    0.498722
    
    # boolean을 이용한 열 조회
    df.iloc[:,[False, True, False, True]]
    # output
                         B           D
    2023-02-18    0.943009    0.686995
    2023-02-19    0.547649    0.293321
    2023-02-20    0.899066    0.508288
    2023-02-21    0.220908    0.555901
    2023-02-22    0.677408    0.174801
    2023-02-23    0.320705    0.498722

     

     

    특정 행과 열 조회

    df.iloc[[2, 5], 0:4]
    # output
                         A           B           C
    2023-02-20    0.857979    0.899066    0.418911
    2023-02-23    0.507152    0.320705    0.988959

     

    df.iloc[[2, 5], 0 : 4]

    iat

    iat은 행 및 열 레이블에서 정수 위치를 기반으로 DataFrame, Series의 단일 값을 가져옵니다.

    iat은 단일 값에 특화돼 있어 단일 값 접근 시, iloc보다 빠릅니다.

    index는 0부터 시작입니다.

     

    사용 방법은 다음과 같습니다.

    DataFrame

    df.iat[row_index, column_index]

    • row_index: 선택할 행의 위치
    • column_index: 선택할 열의 위치

    Series

    s.iat[index]

    • index: Series에서 선택할 요소의 위치
    df.iat[0, 1]
    # output
    # 0.943009
    
    s = df.loc[df.index[0]]
    s.iat[1]
    # output
    # 0.943009
    df.iat[0, 1] or s.iat[1] 결과

    Boolean indexing


    Boolean indexing은 boolean 조건을 사용하여 DataFrame, Series에서 데이터를 선택하는 방법입니다.

     

    boolean 조건은 비교 연산자, 논리 연산자를 사용해서 만듭니다.

    비교 연산자

    • ‘==’, ‘≠’, ‘<’, ‘>’, ‘≤’, ‘≥’

    논리 연산자

    • ‘&’ (and), ‘|’ (or)

    다음은 Boolean indexing 예입니다.

    # 단일 열의 값을 사용하여 데이터 선택
    cond = df['A'] > 0.7
    df[cond]
    # output
                         A           B           C           D
    2023-02-19    0.966399    0.547649    0.465180    0.293321
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-21    0.701611    0.220908    0.943105    0.555901
    
    # DataFrame에서 값 선택
    cond = df > 0.7
    df[cond]
    # output
                         A         B          C         D
    2023-02-18    NaN       0.943009    NaN	      NaN
    2023-02-19    0.966399  NaN         NaN	      NaN
    2023-02-20    0.857979  0.899066    NaN       NaN
    2023-02-21    0.701611  NaN         0.943105  NaN
    2023-02-22    NaN       NaN         NaN       NaN
    2023-02-23    NaN       NaN         0.988959  NaN
    
    # 논리연산자를 사용하여 값 선택
    cond = (df['A'] > 0.7) & (df['A'] < 0.8)
    df[cond]
    # output
                         A           B           C           D
    2023-02-21    0.701611    0.220908    0.943105    0.555901
    
    cond = (df['A'] > 0.7) | (df['C'] < 0.5)
    df[cond]
    # output
                         A           B           C           D
    2023-02-18    0.509482    0.943009    0.096876    0.686995
    2023-02-19    0.966399    0.547649    0.465180    0.293321
    2023-02-20    0.857979    0.899066    0.418911    0.508288
    2023-02-21    0.701611    0.220908    0.943105    0.555901
    2023-02-22    0.102038    0.677408    0.137984    0.174801

     

    728x90
    Comments