머신러닝/Pandas

데이터프레임 기본 [2/2]

블루티카 2022. 4. 27. 17:17

행 선택

행 데이터를 선택하기 위해서 loc와 iloc 인덱서를 사용한다.

  • 인덱스 이름(예: '홍길동', '이순신' 등)을 기준으로 행을 선택할 때는 loc를 사용
  • 정수형 위치 인덱스(예: 1,2,3,4 등)를 사용알 때는 iloc를 사용
# 행 인덱스를 사용하여 행 1개 선택
label1 = df.loc['서준']
position1 = df.iloc[0]
print(label1)
print(position1)
-----------------------------------------------------------------------------------------------
<실행 결과>
수학     90
영어     98
음악     85
체육    100
Name: 서준, dtype: int64

수학     90
영어     98
음악     85
체육    100
Name: 서준, dtype: int64

2개 이상의 행 인덱스를 리스트 형태로 입력하면 매칭되는 모든 행 데이터를 동시에 추출한다.

# 행 인덱스를 사용하여 2개 이상의 행 선택
label2 = df.loc[['서준','우현']]
position2 = df.iloc[[0,1]]
print(label2)
print(position2)
----------------------------------------------------------------------------------------------
<실행 결과>
    수학  영어  음악   체육
서준  90  98  85  100
우현  80  89  95   90

    수학  영어  음악   체육
서준  90  98  85  100
우현  80  89  95   90

단, 범위를 지정해서 여러 개의 행을 동시에 선택 할 때

  • 인덱스 이름을 범위로 지정 하면 지정한 범위까지 출력
  • 위치 인덱스를 사용하면 마지막 값은 출력되지 않음
label3 = df.loc['서준' : '우현']
position3 = df.iloc[0:1]
print(label3)
print(position3)
-----------------------------------------------------------------------------------------------
<실행 결과>
    수학  영어  음악   체육
서준  90  98  85  100
우현  80  89  95   90

    수학  영어  음악   체육
서준  90  98  85  100

열 선택

열 1개 선택(시리즈 생성): DataFrame 객체['열 이름'] 또는 DataFrame 객체.열 이름

DataFrame 객체.열 이름 이 방식을 사용하기 위해서는 열 이름이 문자열일 경우에만 가능

 

exam_data = {'이름' : ['서준', '우현', '인아'],
             '수학' : [90,80,70], 
             '영어' : [98,89,95], 
             '음악' : [85,95,100], 
             '체육' : [100,90,90]}

df = pd.DataFrame(exam_data)
print(df)
print(type(df))

# '수학' 점수 데이터만 선택, 변수 math1에 저장
math1 = df['수학']
print(math1)
print(type(math1))

# '영어' 점수 데이터만 선택, 변수 english에 저장
english = df.영어
print(english)
print(type(english))
--------------------------------------------------------------------------------------------
<실행 결과>
   이름  수학  영어   음악   체육
0  서준  90  98   85  100
1  우현  80  89   95   90
2  인아  70  95  100   90
<class 'pandas.core.frame.DataFrame'>

0    90
1    80
2    70
Name: 수학, dtype: int64
<class 'pandas.core.series.Series'>

0    98
1    89
2    95
Name: 영어, dtype: int64
<class 'pandas.core.series.Series'>

 

열 n개 선택(데이터프레임 생성): DataFrame 객체[['열1, 열2, 열3 ,,,,,,,']]

* 2중 대괄호 [[]]를 사용하면 열 이름이 1개라도 데이터프레임으로 반환한다.

# '음악', '체육' 점수 데이터를 선택. 변수 music_gym에 저장
music_gym = df[['음악', '체육']]
print(music_gym)
print(type(music_gym))

# '수학' 점수 데이터만 선택, 변수 math2에 저장
math2 = df[['수학']]
print(math2)
print(type(math2))
-----------------------------------------------------------------------------------------------
<실행 결과>
음악   체육
0   85  100
1   95   90
2  100   90
<class 'pandas.core.frame.DataFrame'>

   수학
0  90
1  80
2  70
<class 'pandas.core.frame.DataFrame'>

원소 선택

인덱스 이름: DataFrame 객체.loc[행 인덱스, 열 이름]

정수 위치 인덱스: DataFrame 객체.iloc[행 번호, 열 번호]

 

c = df.loc['서준', ['음악', '체육']]
print(c)
d = df.iloc[0, [2,3]]
print(d)
e = df.loc['서준', '음악':'체육']
print(e)
f = df.iloc[0, 2:]
print(f)
-----------------------------------------------------------------------------------------------
<실행 결과>
음악     85
체육    100
Name: 서준, dtype: int64
음악     85
체육    100
Name: 서준, dtype: int64
음악     85
체육    100
Name: 서준, dtype: int64
음악     85
체육    100
Name: 서준, dtype: int64

행 인덱스와 열 이름을 각각 2개 이상 선택하여 데이터프레임을 얻는 방법

# df 2개 이상의 행과 열에 속하는 원소들 선택('서준', '우현' 의 '음악', '체육' 점수)
g = df.loc[['서준', '우현'], ['음악','체육']]
print(g)
h = df.iloc[[0,1], [2,3]]
print(h)
i = df.loc['서준':'우현', '음악':'체육']
print(i)
j = df.iloc[0:2, 2:]
print(j)
-----------------------------------------------------------------------------------------------
<실행 결과>
    음악   체육
이름         
서준  85  100
우현  95   90
    음악   체육
이름         
서준  85  100
우현  95   90
    음악   체육
이름         
서준  85  100
우현  95   90
    음악   체육
이름         
서준  85  100
우현  95   90

 

'머신러닝 > Pandas' 카테고리의 다른 글

데이터프레임 기본 [1/2]  (0) 2022.04.23
판다스 기초  (0) 2022.04.22