[pandas] DataFrame 심화 2

기본 DataFrame column (2)

pandasDataFrame 에 관한 rowcolumn 추가, 삭제등에 관한 내용에 대해서 알아본다.

대부분의 예제로 다음의 data를 사용한다.

import pandas as pd
import numpy as np

data = {'이름':['이지은', '박동훈', '홍길동', '강감찬', '오해영'],
        '학과':['컴퓨터', '기계','철학', '컴퓨터', '철학'],
        '학년':[1, 2, 2, 4, 3],
        '학점':[1.5, 2.0, 3.1, 1.1, 2.7]
       }
df = pd.DataFrame(data, 
                  columns = ['학과', '이름', '학점', '학년', '등급'],
                  index = ['one', 'two', 'three', 'four', 'five'])

display(df)

dataFrame_detail

column 추가( Series를 이용한 추가방법)

DataFrame에 새로운 column을 추가하기 위해서는 추출 및 수정과 같이 scalar, list, ndarray를 사용할 수 있고 추가적으로 Series 도 사용할 수 있다. scalar, list, ndarray 는 추출 및 수정과 동일하므로 건너뛴다.

df['나이'] = pd.Series([20, 21, 22, 23, 24])
display(df)

dataFrame_add1

이렇게 그냥 Series값을 대입해 버리면 NaN (Not a Number) 값으로 나와버린다.

즉, 제대로 추가가 되지 않는다. column을 제대로 추가하기 위해서는 index 값을 지정해주면 제대로 작동한다.

df['나이'] = pd.Series([20, 21, 22, 23, 24],
                      index = ['one', 'two', 'three', 'four', 'five']) 
display(df)

dataFrame_add2

그러면 Series를 사용하려면 index를 추가해야 하므로 ndarraylist를 사용하는것보다 귀찮다고 느낄수 있다. 그러나 Series를 사용했을때 ndarraylist와 달리 값을 주지 않는 곳에 NaN 값을 주면서 원하는 index 위치에만 값을 줄 수 있다.

df['나이'] = pd.Series([20, 22,  24],
                    index=['one','three','five']) 
display(df)

dataFrame_add3

column 추가(연산을 통한 추가방법)

연산을 통해 column을 추가 할 수 있다.

print(df['학점'] > 3.0)
## one      False
## two      False
## three     True
## four     False
## five     False
## Name: 학점, dtype: bool     : Series
df['장학생여부'] = df['학점'] > 3.0
display(df)

dataFrame_add4

column 삭제

column 뿐만 아니라 row를 삭제 할때 모두 drop이라는 method를 사용한다.

option으로는 axisinplace가 들어간다.

axis 로 행과 열을 선택할 수 있고 inplace (False/True)로 원본을 보존하고 삭제된 결과를 새로 만들지(False) 아니면 원본을 지울지(True) 결정한다.

display(df.drop('등급', axis=1, inplace=False)) # 등급이 사라진다.

dataFrame_add5

df.drop(['학년', '등급'], axis=1, inplace=True)
display(df)

dataFrame_detail6