[판다스] 데이터 프레임 (3)

밍키·2020년 8월 12일
0

판다 판다 판다스

목록 보기
6/12

데이터 프레임의 행과 열을 조회 및 변경해보자

1. 컬럼 이름과 행 이름 조회 및 변경


1.1 컬럼 이름/행 이름 조회


  • DataFrame객체.columns
    • 컬럼명 조회
    • 컬럼명은 차후 조회를 위해 따로 변수에 저장하는 것이 좋다.
  • DataFrame객체.index
    • 행명 조회

1.2 컬럼 이름 / 행 이름 변경


  • 컬럼과 인덱스는 불변의 성격을 가짐
  • columns와 index 속성으로는 통째로 바꾸는 것은 가능하나 index로 하나씩 바꾸는 것은 안된다.
    • df.columns = ['새이름','새이름', ... , '새이름']
    • df.columns[1] = '새이름' # 이건 안된다.
      • rename() 메서드 사용해야 한다.
  • 행 이름 변경하는 경우는 거의 없음. 열 이름 변경은 많이 사용.

1.3 컬럼 이름 / 행 이름 변경 관련 메서드


  • DataFrame객체.rename(index=행이름변경설정, columns=열이름변경설정, inplace=False)
    • 개별 컬럼이름/행이름 변경 하는 메소드
      • 몇 개만 골라서 변경하고 싶을 때
    • 변경한 DataFrame을 반환
    • 변경설정: 딕셔너리 사용
      • {'기존이름':'새이름', ..}
      • inplace: 원본을 변경할지 여부(boolean)
  • DataFrame객체.set_index(컬럼이름, inplace=False)
    • 특정 컬럼을 행의 index 명으로 사용
    • 열이 index명이 되면서 그 컬럼은 Data Set 에서 제거된다.
  • DataFrame객체.reset_index(inplace=False)
    • index를 첫번째 컬럼으로 복원

1.4 TODO


# 컬럼 조회
grade.columns

# 컬럼 명 전체 변경
grade.columns = ['ID', '국어', '영어']
grade

# 하나만 변경
# grade.columns[1] ='KOR' # 에러 발생
# 통째로 갈아버리는 건 되는데 일부만 변경하는 건 안됨.

# 일부만 변경할 때는 rename 사용
new_columns = {
    '국어':'Korean',
    '영어':'English'
}
grade.rename(columns=new_columns)
# 원본은 바뀌지 않음.

# 넘파이 방식.
# 축을 지정해줘야 한다.
grade.rename(mapper=new_columns, axis=1)

# 아이디 컬럼을 인덱스로 뺄 때
grade.set_index('ID') # 메타데이터, 축 이름
# 원본이 바뀌는 건 아니다.
# read_csv랑 같다. 처음에 읽어올 때 할건지 읽어오고나서 할건지의 차이

# 인덱스를 값으로 다시 뺄 때
grade.reset_index()
# 마찬가지로 원본이 바뀌지는 않음.
grade.reset_index().reset_index()
# 이렇게 한 번 더 가능. 
# 기본적으로 생기는 인덱스 빼는 것까지만 가능. 무한정 되지는 않다.

# 인덱스를 제거하고 순번으로 변경.
grade.reset_index(drop=True)

2. 행과 열 삭제


  • DataFrame객체.drop(columns, index, inplace=False)
    • columns : 삭제할 열이름 또는 열이름 리스트
    • index : 삭제할 index명 또는 index 리스트
    • inplace: 원본을 변경할지 여부(boolean)

2.1 TODO


# 컬럼 삭제
grade.drop(columns='ID')

# 컬럼 두 개 이상 삭제
grade.drop(columns=['ID', '영어'])

# 넘파이식 삭제. 축을 지정
grade.drop(labels=['ID', '영어'], axis=1)
# 컬럼있는 것만 삭제 가능. 없는 컬럼은 에러 발생.

# 행을 삭제
# 인덱스 지정
grade.drop(index=0)

# 두 개 이상의 인덱스 삭제
grade.drop(index=[0,2,3])
# 얘는 순번이 아니다. 이름이다!

# 컬럼이든 인덱스든 순번으로는 삭제할 수 없다.

# 넘파이식으로 여러 개 삭제
grade.drop(labels=[0,2,3], axis=0)
# 축을 지정해준다.

# drop() 은 컬럼 이름, index 이름으로 지정해야 한다.
# 순번은 지정할 수 없다.
# grade.drop(columns=[0,1]) # 에러 발생

# 슬라이싱 가능? 될리가 없지
# grade.drop(cloumns=[0:2]) # 에러발생

# 인덱스 이름으로 인덱스 삭제
grade.drop(index='id-1')
grade.drop(index=['id-1', 'id-3'])

3. 열 추가


  • 새로운 열을 지정 후 값을 대입하면 새로운 열을 추가할 수 있다.
    • 보통 파생변수를 만들 때 사용한다.
  • df['새열명'] = 값
    • 마지막 열로 추가된다.
    • 하나의 값을 대입하면 모든 행에 그 값이 대입된다.
    • 다른 값을 주려면 배열에 담아서 대입한다.
      • 행에 개수에 맞춰서 대입해줘야 한다.
  • 기존 열들의 값을 이용한 새로운 열 생성
    • 벡터 연산을 이용하여 값 대입
    • df[‘새열이름‘] = 기존 열들을 이용한 연산

3.1 TODO


# 수학을 추가해보자
grade['수학'] = 80 # 전부 80으로 채운다
grade 
# 새로운 컬럼을 생성

# 있는 컬럼을 지정하면 변경된다.
grade['수학'] = 100
grade
# 컬럼이 없다면 추가, 있다면 변경.

# 컬럼에 값을 따로 넣어주기
grade['과학'] = [100,70,90,50,80]
grade
# 이렇게 할 일은 거의 없는데 그냥 가능하다는 것만 알아둬
# 행 수와 넣는 데이터 수가 같아야한다. # 다르면 에러 발생

# 컬럼이름을 어떤 분야에서 바로보느냐에 따라 속성, 변수, 특성, 피처 라고도 한다.
# 이 변수들을 이용해 새로운 값을 만드는 것
# 기존 데이터를 이용해서 만드는 것을 파생변수, 파생컬럼 이라고 한다.
# 기존의 것으로부터 파생된 것

# 컬럼의 값을 조회
grade['국어'] # 하나의 행 또는 열은 시리즈다.

# 벡터화 연산 이용
# 시리즈 + 시리즈
grade['국어'] + grade['영어'] + grade['수학'] + grade['과학']

# 파생 변수
grade['총점'] = grade['국어'] + grade['영어'] + grade['수학'] + grade['과학']
grade

# 시리즈 // 스칼라
grade['총점']//4

# 새로운 파생 변수
grade['평균'] = grade['총점']//4
grade

# 메서드 이용해서 파생변수 만들기
grade2 = pd.read_csv('data/grade2.csv', index_col='id')
grade2

# 메서드를 이용해서 연산하기
grade2.sum()# 축 기본값 = 0
# axis=0

# 합계
total = grade2.sum(axis=1)
total

# 평균 구하기
grade2.mean() # 디폴트 값 0번 축
avg = grade2.mean(axis=1)
avg

# 파생 변수로 컬럼 생성하기. 열 추가
grade2['총점'] = total
grade2['평균'] = avg
grade2
profile
대한민국 4차 산업의 역군을 꿈꾸며.

0개의 댓글