DevSSOM

파이썬 pandas - 데이터프레임의 데이터 선택, 추가, 수정하기 본문

Python/기초

파이썬 pandas - 데이터프레임의 데이터 선택, 추가, 수정하기

데브쏨 2021. 7. 26. 12:22
반응형

데이터 선택하기

1. 인덱싱 / 슬라이싱

데이터프레임이나 시리즈 데이터에서 데이터를 찾는 방법은 두 가지가 있음.

  1. loc : 명시적 인덱스를 참조하는 함수. 쉽게 말하면, 데이터프레임에 어떤 인덱스가 있는지 알고 딱 이름을 넣어서 걔만 빼오는 거야. loc는 location의 약자. 
  2. iloc : 암묵적인 인덱스를 참조하는 함수. 인덱스 값이 뭔지 모를 때, '아... 그그 첫번째 인덱스 있잖아? 그거 빼와.' 해서 빼오는 거. 학교 선생님들이 반에서 몇 번 불러서 발표시키는 것처럼.
# Country DataFrame
       population         gdp
korea        5180   169320000
japan       12718   516700000
china      141500  1409250000
usa         32676  2041280000


country.loc['korea']    # 인덱싱

# 인덱싱 결과값
population         5180
gdp           169320000
Name: korea, dtype: int64


country.loc['korea':'japan', :'population']    # 슬라이싱 [앞에는 인덱스 자리, 뒤에는 컬럼 자리] 

# 슬라이싱 결과값
       population
korea        5180
japan       12718
country.iloc[0]    # 인덱싱

# 인덱싱 결과값
population         5180
gdp           169320000
Name: korea, dtype: int64


country.iloc[1:3, :2]    # 슬라이싱 [앞에는 인덱스 자리, 뒤에는 컬럼 자리] 

# 슬라이싱 결과값
       population         gdp
japan       12718   516700000
china      141500  1409250000

 

 

2. 컬럼으로 선택

컬럼명을 활용해서 데이터프레임에서 데이터를 선택할 수 있음. 시리즈의 합이 데이터프레임이니까, 데이터프레임에서 일부를 잘라내면 그게 또 시리즈가 됨. country['gdp'] 이렇게 대괄호를 한 번 하면 컬럼이지만, country[['gdp']] 이렇게 대괄호를 두 번 하면 데이터프레임 그 자체가 됨. 그래서 인덱스, 컬럼 뚜껑이 덮혀진 그대로 나오게 됨.

# Country DataFrame
       population         gdp
korea        5180   169320000
japan       12718   516700000
china      141500  1409250000
usa         32676  2041280000


country['gdp']

# Series
korea     169320000
japan     516700000
china    1409250000
usa      2041280000
Name: gdp, dtype: int64


country[['gdp']]

# DataFrame
              gdp
korea   169320000
japan   516700000
china  1409250000
usa    2041280000

 

 

3. 조건으로 선택

Masking 연산이나 query 함수를 활용해서 조건에 맞는 값만 데이터프레임에서 뽑아낼 수도 있음. Numpy의 마스킹 연산처럼 조건식을 직접 쓸 수도 있고, query() 함수를 이용하는 방법도 있음.

# masking 연산 활용
country[country['population'] < 10000]

# population 컬럼의 값 중에서 10000보다 작은 것만 선택
       population        gdp
korea        5180  169320000


# query 함수 활용
country.query("population > 100000")

# population 값이 100000이 넘는 값을 선택
       population         gdp
china      141500  1409250000

 

 

데이터 변경하기 - 추가/수정

1. 컬럼 추가하기

Series도 numpy array처럼 연산자를 활용할 수 있음.

gdp_per_capita = country['gdp'] / country['population']
# 두 개의 시리즈 데이터를 서로 나누게 됨

# 이걸 그대로 데이터프레임에 넣기 위해서는
# 이렇게 새로운 컬럼으로 추가해줌
country['gdp per capita'] = gdp_per_capita

# 컬럼 추가 결과값
       population         gdp  gdp per capita
korea        5180   169320000    32687.258687
japan       12718   516700000    40627.457147
china      141500  1409250000     9959.363958
usa         32676  2041280000    62470.314604

 

2. 리스트로 추가/수정 or 딕셔너리로 추가/수정

df = pd.DataFrame(columns = ['이름', '나이', '주소'])      
# 데이터프레임 생성

df.loc[0] = ['길동', '26', '서울']

# 리스트로 데이터 추가
   이름  나이  주소
0  길동  26  서울 


df.loc[1] = {'이름':'철수', '나이':'25', '주소':'인천'}

# 딕셔너리로 데이터 추가
   이름  나이  주소
0  길동  26  서울
1  철수  25  인천


df.loc[1, '이름'] = '영희'

# 명시적 인덱스를 활용해서 데이터 수정
   이름  나이  주소
0  길동  26  서울
1  영희  25  인천

 

3. NaN 컬럼 추가

NaN값으로 초기화한 새로운 컬럼을 추가할 수도 있음. NaN은 numpy의 Not a Number -> 숫자가 아니다. 비어있는 데이터다. 라는 뜻.

 df['전화번호'] = np.nan       
 
 # 새로운 컬럼 추가 후에 초기화
    이름  나이  주소  전화번호
0  길동  26  서울   NaN
1  영희  25  인천   NaN 


 df.loc[0, '전화번호'] = '01012341234'
 
 # 명시적 인덱스로 데이터 수정
    이름  나이  주소         전화번호
0  길동  26  서울  01012341234
1  영희  25  인천          NaN

 

4. 컬럼 삭제하기

drop 을 활용해서, 데이터프레임에서 컬럼을 삭제한 후에 inplace 속성으로 원본을 변경하는 설정을 할 수도 있음. 

df.drop('전화번호', axis = 1, inplace = True)    # 컬럼 삭제
# axis = 1 : 열 방향 / axis = 0 : 행 방향
# inplace = True : 원본 변경 / inplace = False : 원본 변경 X

# 컬럼 삭제 결과
0  길동  26  서울
1  영희  25  인천

 

728x90
반응형
댓글