본문 바로가기

코딩/데이터분석

[Python/파이썬] Pandas 기초 정리 : Dataframe 내부 데이터 조회 방법

반응형

※ 이 글을 쓰는 사람은 SW 비전공자입니다.

※ 개인 공부를 위해 정리하는 글이며, 작성한 코드들은 효율성, 깔끔함(?) 등과는 거리가 멀 수 있습니다.

 

1편 : 2021.03.31 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Series, Dataframe 개념 정리

2편 : 2021.04.01 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : 엑셀 파일(.xlsx) Dataframe으로 만들기

3편 : 2021.04.03 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 내부 데이터 조회 방법

4편 : 2021.04.05 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 추가 방법

5편 : 2021.04.11 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 삭제하기(drop 함수)

6편 : 2021.04.13 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : 원소바꾸기, dropna(), fillna()

7편 : 2021.04.24 - [코딩/Python] - [Python/파이썬] Pandas Dataframe 결합 : Concat

8편 : 2021.04.25 - [코딩/Python] - [Python/파이썬] Pandas Dataframe 결합 : Merge


  이번 포스팅에서는 만들어진 Dataframe을 가공하고 조회하는 방법에 대해 일부 정리하였다. 아래와 같은 목록으로 정리할 예정이다.  이번 편에서는 1), 2)를 다룰 예정이다. 내용을 정리하면서 yg's blog라는 github를 참고하였다.

(참고링크는 하단에 기재 함)

 

1) Dataframe의 행, 열 이름 변경

 

2) Dataframe 조회

   -. 인덱싱

   -. 슬라이싱

   -. 열 조회

   -. 원소 조회

 

3) 행 열 추가하기

 

4) 행 삭제하기(drop)

 

4) 원소값 바꾸기

 

5) 결측치(NaN) 관련

 

 

 이전 편에서 만들었던 dataframe을 그대로 활용할 예정이다.

 

 

* Dataframe 생성 코드

 

import pandas as pd

#dataframe 생성
df = pd.read_excel("df_test.xlsx", engine="openpyxl")
print(df)

 

   이름   국어   영어   수학
0  YB  100  100  100        
1  SW   90   90   90        
2  EJ   80   80   80        
3  HJ   70   70   70    

 

 

1. Dataframe의 index, column  수정

 

 

1) index와 column 조회

 

-.  인덱스와 컬럼명을 조회하려면 아래와 같이 코드 사용

 

     index명 : 'dataframe명'.index

     column명 : 'dataframe명'.columns

 

-. 인덱스의 경우 숫자 0~3이어서 start=0, stop=4, step1이라고 출력 된다.

#print(df.columns)의 결과
Index(['이름', '국어', '영어', '수학'], dtype='object')

#print(df.index)의 결과
RangeIndex(start=0, stop=4, step=1)

 

2) index와 column명 변경

 

 

-. 인덱스 및 컬럼명을 바꾸려면 아래 코드와 같이 하면 작성하면 된다.

 

<코드>

import pandas as pd

#dataframe 생성
df = pd.read_excel("df_test.xlsx", engine="openpyxl")

#인덱스 바꾸기
df.index = ['사람1', '사람2', '사람3', '사람4']
#컬럼명 바꾸기
df.columns = ['Name', 'Korean', 'English', 'Math']
print(df)

 

    Name  Korean  English  Math
사람1   YB     100      100   100
사람2   SW      90       90    90
사람3   EJ      80       80    80
사람4   HJ      70       70    70

 

 

-. 특정 열이나 인덱스만 바꾸고 싶으면 rename( ) 함수를 사용한다.

-. rename 함수사용시 내부 파라미터로 inplace=True를 반드시 넣어줘야 dataframe 원본이 수정된다.

 

<코드>

#특정 인덱스만 변경하기
df.rename(index={'사람1':'Person1', '사람3':"Person3"}, inplace=True)

#특정 컬럼명만 변경하기
df.rename(columns={'Name':'성명', 'Math':"수학"}, inplace=True)
print(df)

 

         성명  Korean  English   수학
Person1  YB     100      100  100
사람2      SW      90       90   90
Person3  EJ      80       80   80
사람4      HJ      70       70   70

 

 

2. 데이터프레임 조회하기

 

 

  다시 처음과 동일한 dataframe 을 생성하였다.

 

<코드>

import pandas as pd

#dataframe 생성
df = pd.read_excel("df_test.xlsx", engine="openpyxl")

df.index = ['사람1', '사람2', '사람3', '사람4']
print(df)

 

     이름   국어   영어   수학
사람1  YB  100  100  100
사람2  SW   90   90   90
사람3  EJ   80   80   80
사람4  HJ   70   70   70

 

 

1) 인덱싱하기

 

 

-. 인덱싱 또는 슬라이싱할 때 아래 2개 함수를 이용한다.

  

    loc( ) : 이름으로 접근하기

    iloc( ) : 숫자로 접근하기(행위치값 0부터~)

 

-. loc 사용하기 : 인덱스명에 대한 행 값들을 읽어오며, 결과는 Series type이 된다.

 

<코드>

name = df.loc['사람3']
print(name)
print(type(name))

 

이름    EJ
국어    80
영어    80
수학    80
Name: 사람3, dtype: object

<class 'pandas.core.series.Series'>

 

 

-. iloc 사용하기 : 행위치값으로 읽어온다. 첫줄의 위치값은 0이다. 마찬가지로 결과는 Series이다.

 

<코드>

name = df.iloc[0]
print(name)
print(type(name))

 

이름     YB
국어    100
영어    100
수학    100
Name: 사람1, dtype: object

<class 'pandas.core.series.Series'>

 

 

2) 슬라이싱하기 : loc, iloc를 활용하여 범위로 읽어올 수 있다.

 

 

-. loc : 인덱스명으로 슬라이싱할 수 있다. 아래 코드는 사람1~사람3까지 행 data를 읽어온다. 결과는 dataframe이다.

 

<코드>

name = df.loc['사람1':'사람3']
print(name)
print(type(name))

 

     이름   국어   영어   수학
사람1  YB  100  100  100
사람2  SW   90   90   90
사람3  EJ   80   80   80

<class 'pandas.core.frame.DataFrame'>

 

-. iloc : 행위치값으로 슬라이싱할 수 있다. 첫행값은 0이다. 위 결과와 똑같이 출력하려면 iloc[0:3]를 작성한다.

               행위치값으로 슬라이싱할 경우 마지막 숫자(3행)는 포함하지 않아서 마지막 숫자는 +1을 해야한다.

 

<코드>

name = df.iloc[0:3]
print(name)
print(type(name))

 

     이름   국어   영어   수학
사람1  YB  100  100  100
사람2  SW   90   90   90
사람3  EJ   80   80   80

<class 'pandas.core.frame.DataFrame'>

 

 

-. 2행단위로 조회, 역순으로 조회하는 방법은 아래와 같이 작성한다.

 

<코드>

#2행단위로 조회
row1 = df.iloc[::2] #df.iloc[0:3:2]랑 동일
print(row1)

#역순으로 조회
row2 = df.iloc[::-1]
print(row2)

 

   이름   국어   영어   수학
사람1  YB  100  100  100
사람3  EJ   80   80   80

     이름   국어   영어   수학
사람4  HJ   70   70   70
사람3  EJ   80   80   80
사람2  SW   90   90   90
사람1  YB  100  100  100

 

 

3) 열을 선택하는 방법

 

 

-. 아래 처럼 열단위로 컬럼을 조회할 수 있다.

 

<코드>

column1 = df['국어'] #컬럼 1개
column2 = df[['국어','수학']] #컬럼 2개
column3 = df.영어 #컬럼 1개

print("컬럼 1개만:")
print(column1)

print("컬럼 2개:")
print(column2)

print("또다른 표현:")
print(column3)

 

컬럼 1개만:
사람1    100
사람2     90
사람3     80
사람4     70
Name: 국어, dtype: int64

컬럼 2개:
      국어   수학
사람1  100  100
사람2   90   90
사람3   80   80
사람4   70   70

또다른 표현:
사람1    100
사람2     90
사람3     80
사람4     70
Name: 영어, dtype: int64

 

 

4) dataframe에서 특정 값 조회하기(원소)

 

 

-. index를 '이름'열로 설정하여 dataframe 재생성하였음.

 

<코드>

import pandas as pd

#dataframe 생성, 이름열을 인덱스로 설정
df = pd.read_excel("df_test.xlsx", engine="openpyxl", index_col="이름")
print(df)

 

     국어  영어  수학
이름
YB  100  90  80
SW   70  60  50
EJ   40  30  20
HJ   10   5   1

 

-. loc과 iloc 함수를 사용하면 특정 원소만 가져오기 가능.

   4가지 표현법으로 정리하였다.

 

<코드>

#YB 수학점수 : loc 사용해보기
score1 = df.loc['YB', '수학']
print('YB 수학점수 :' ,score1)

#SW 영어점수 : iloc 사용해보기
score2 = df.iloc[1, 1] #행,열 모두 0,1,2 인덱싱
print("SW 영어점수 :", score2)

#EJ의 국어,영어점수 동시에 가져오기 : loc 사용해보기
score3 = df.loc['EJ', ['국어','영어']]
print("EJ 국어, 영어점수 :","\n", score3)

#HJ의 국어, 수학점수 동시에 가져오기 # iloc 사용해보기
score4 = df.iloc[3,[0,2]] #행, 열 모두 0,1,2인덱싱
print("HJ의 국어,수학점수 :","\n",score4)

 

     국어  영어  수학
이름
YB  100  90  80
SW   70  60  50
EJ   40  30  20
HJ   10   5   1

#score1
YB 수학점수 : 80

#score2
SW 영어점수 : 60

#score3
EJ 국어, 영어점수 :
국어    40
영어    30
Name: EJ, dtype: int64

#score4
HJ의 국어,수학점수 : 
국어    10
수학     1
Name: HJ, dtype: int64

 

 

 

※ 다음편

4편 : 2021.04.05 - [코딩/Python] - [Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 추가 방법

 


 

참고링크 : yg's blog : yganalyst.github.io/data_handling/Pd_1/#2-7-%EC%97%B4-%EC%84%A0%ED%83%9D

 

[Pandas 기초] 시리즈(Series)와 데이터프레임(Dataframe)

판다스의 기본 자료구조인 시리즈와 데이터프레임을 알아보자

yganalyst.github.io

 

 

728x90