※ 이 글을 쓰는 사람은 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
'코딩 > 데이터분석' 카테고리의 다른 글
[Python/파이썬] Numpy 기초 1편 : Array 생성 및 인덱싱,슬라이싱 (0) | 2021.06.29 |
---|---|
[Python/파이썬] Pandas 기초 정리 : 원소 바꾸기, dropna(), fillna() (0) | 2021.04.13 |
[Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 삭제하기(drop 함수) (2) | 2021.04.11 |
[Python/파이썬] Pandas 기초 정리 : Dataframe 행, 열 추가 방법 (0) | 2021.04.05 |
[Python/파이썬] Pandas 기초 정리 : Series, Dataframe 개념 정리 (2) | 2021.03.31 |