조금씩 꾸준히 완성을 향해

[Pandas] 행과 열 다루기(삭제, 선택, 추가, 변경) 본문

Python/Numpy & Pandas

[Pandas] 행과 열 다루기(삭제, 선택, 추가, 변경)

all_sound 2022. 9. 29. 18:01

행/열 삭제

  • drop()
    • 축 옵션으로 axis=0을 입력하면 행 삭제 (default 설정이라 생략가능)
    • 축옵션 axis=1을 입력하면 열을 삭제
      동시에 여러 개의 행 또는 열을 삭제하려면, 리스트 형태로 입력
    • 원본을 변경하지 않고 새로운 객체를 반환하기 때문에 원본 객체를 변경하려면 inplace=True 옵션 사용

 

 

  • 행 삭제
# 인덱스가 '우현'인 행 삭제
df2 = df.copy()  # df2에 원본 데이터 복사
df2.drop('우현', inplace=True)  # df2 직접변경
df2
# 인덱스가 '우현', '인아'인 행 삭제
df3 = df.drop(['우현', '인아'], axis = 0) #원본에서 수정된 데이터를 바로 df3으로 받기
df3

 

  • 열 삭제
# '수학' 열 삭제
df4 = df.drop('수학', axis=1)
df4
 

# '영어', '음악' 열 삭제
df5 = df.drop(['영어', '음악'], axis=1)
df5

 


행/열/원소 선택

 
  • 열 선택 
# 대괄호 안에 값 하나만 넣으면 시리즈로 반환
df['수학']
# 열 하나만 선택할 경우 괄호 생략도 가능
df.수학
# 대괄호 두개를 써주면 이차원 데이터프레임으로 반환
df[['수학']]
# 두 개 열 이상 선택 : 무조건 대괄호 두 개
df[['수학', '영어']]
 
  • 행 선택
    • loc과 iloc 인덱서 사용
    • 인덱스 이름을 기준으로 행을 선택할 때는 loc, 정수형 위치 인덱스를 사용할 때는 iloc 

 

  • 1개 행 선택
# 인덱스 이름으로 행 선택
df.loc['서준']  #시리즈
df.loc[['서준']]  #데이터프레임
 

# 정수 인덱스로 행 선택
df.iloc[0]
 
 
  • 여러 개의 원소 선택 (인덱스 범위 지정)
# '서준'행에서 '우현'행까지 선택
df.loc['서준':'우현']
 
# 행 인덱스 0부터 1까지 선택
df.iloc[0:2]
 

 
# 원소 하나 선택 (서준이의 음악 점수)
df.loc['서준', '음악']  # 85
 
# 행 인덱스 0, 열 인덱스 2의 값
df.iloc[0, 2]  # 85
 
# 서준이의 음악, 체육 점수
df.loc['서준',['음악','체육']]
 
# 서준이의 음악~체육 점수
df.loc['서준', '음악':'체육']
 
# 행 인덱스 0, 열 인덱스 -2 & -1
df.iloc[0,[-2, -1]]
 
# 행 인덱스 0, 열 인덱스 -2 ~ 0
df.iloc[0, -2:]
 
# 서준, 우현 행 + 음악, 체육 열
df.loc[['서준', '우현'], ['음악','체육']]
 
# 행 인덱스 0, 1 + 열 인덱스 2, 3
df.iloc[[0,1], [2,3]]
 
 
# 행 인덱스 0~1, 열 인덱스 2~끝
df.iloc[:2, 2:]
 

행/열 추가

  • 열추가
    • 추가하려는 열 이름과 데이터 값을 입력. 마지막 열에 덧붙이듯 새로운 열 추가.
    • 이때 모든 행에 동일한 값이 입력되는 점에 유의.
df6 = df.copy()
df6['국어'] = 90  #BroadCasting
df6['과학'] = [80, 40, 60]
df6
 
 
  • 행추가
    • 행 인덱스와 데이터 값을 loc인덱서를 사용하여 입력
df7 = df.copy()
df7.loc[3] = 0
df7.loc['동규']  = [100, 90, 80, 70, 60]
df7.loc['민아'] = df7.loc['동규']
df7
 

 

 

원소 값 변경

원소를 선택하고 새로운 데이터 값을 지정

 

 

  • 1개의 원소 변경
 
# 서준의 체육 점수를 100으로 변경
df6.loc['서준']['체육'] = 100  # Warning! ->error가 나지는 않지만 지양해야 할 방법
 
# 서준의 체육 점수를 100으로 변경
df6.loc['서준', '체육'] = 100
 
# 서준의 음악, 체육 점수를 모두 50점으로 변경
df6.loc['서준', ['음악', '체육']] = 50
 
# 서준의 음악, 체육을 각각 90, 60으로 변경
df6.loc['서준', ['음악', '체육']] = 90, 60
 

행/열의 위치 바꾸기

  • 데이터 프레임의 행과 열을 서로 맞바꾸는 방법
  • transpose() or 객체.T
df.transpose()
 
df.transpose().T