pandas_index

Index 객체, reindex

  • 표 형식의 데이터에서 각 행과 열에 대한 헤더(이름)과 다른 메타데이터(축의 이름)를 저장하는 객체
  • Series나 DataFrame 객체를 생성할 때 사용되는 배열이나 또는 순차적인 이름은 내부적으로 색인으로 변환됨
import pandas as pd
from pandas import Series, DataFrame
import numpy as np

1. Index 객체

obj = Series(range(3), index=['a', 'b', 'c'])
obj
a    0
b    1
c    2
dtype: int64

 

idx = obj.index
idx
Index(['a', 'b', 'c'], dtype='object')

 

idx[1]
'b'

 

idx[1:]
Index(['b', 'c'], dtype='object')

 

2. ReIndex

  • 재색인(ReIndex): 새로운 색인에 맞도록 객체를 새로 생성하는 기능, row, column index 모두 변경 가능
  • 주의: Index 객체는 변경할 수 없음, 변경을 위해서는 reindex 사용
#idx[1] = 'd'
#idx[1]
#TypeError: Index does not support mutable operations
  • Index객체는 변경 불가능하나 미리 만들어서 공유할 수 있음
idx2 = pd.Index(np.arange(3))
idx2
Int64Index([0, 1, 2], dtype='int64')

 

1) Series 객체의 reindex

obj2 = Series([2.3, 4.3, -4.1, 3.5], index=['d', 'b', 'a', 'c'])
obj2
d    2.3
b    4.3
a   -4.1
c    3.5
dtype: float64

 

obj2 = obj2.reindex(['a', 'b', 'c', 'd', 'e'])
obj2
a   -4.1
b    4.3
c    3.5
d    2.3
e    NaN
dtype: float64

 

obj3 = obj2.reindex(['a', 'b', 'c', 'd', 'e', 'f'], fill_value=0.0)
obj3
a   -4.1
b    4.3
c    3.5
d    2.3
e    NaN
f    0.0
dtype: float64

 

2) DataFrame reindex

df = DataFrame(np.arange(9).reshape(3,3), 
               index=['a', 'b', 'd'], columns=['x', 'y', 'z'])
df
xyz
a012
b345
d678

 

df2 = df.reindex(['a', 'b', 'c', 'd'])
df2
xyz
a0.01.02.0
b3.04.05.0
cNaNNaNNaN
d6.07.08.0

 

col = ['x', 'y', 'w', 'z']
df2 = df.reindex(columns=col)
df2
x y w z
a 0 1 NaN 2
b 3 4 NaN 5
d 6 7 NaN 8

 

  • 보간법: 주로 시계열 데이터에서 값을 보간하기 위해 사용됨
  • method='ffill'은 앞에 있는 값으로 보간
  • DataFrame 객체에서 보간: row에 대해서만 보간
df3 = df.reindex(index=['a', 'b', 'c', 'd'], columns=col)
df3
xywz
a0.01.0NaN2.0
b3.04.0NaN5.0
cNaNNaNNaNNaN
d6.07.0NaN8.0

 

df3 = df.reindex(index=['a', 'b', 'c', 'd'], columns=col, method='ffill')
df3
xywz
a01NaN2
b34NaN5
c34NaN5
d67NaN8

 

3) ix를 이용한 reindex

df
xyz
a012
b345
d678

 

df4 = df.ix[['a', 'b', 'c', 'd'], col]
df4 

x y w z
a 0.0 1.0 NaN 2.0
b 3.0 4.0 NaN 5.0
c NaN NaN NaN NaN
d 6.0 7.0 NaN 8.0

 

3. Row, Colum 삭제

1) Series에서 index 삭제하기

obj4 = Series(np.arange(5), index=['a', 'b', 'c', 'd', 'e'])
obj4
a    0
b    1
c    2
d    3
e    4
dtype: int64

 

obj5 = obj4.drop('c')
obj5
a    0
b    1
d    3
e    4
dtype: int64

 

obj5 = obj4.drop(['b', 'd', 'c'])
obj5
a    0
e    4
dtype: int64

 

2) DataFrame에서 row 삭제하기

df5 = DataFrame(np.arange(16).reshape(4,4),
               index=['seoul', 'busan', 'daegu', 'incheon'],
               columns=['one', 'two', 'three', 'four'])
df5
one two three four
seoul 0 1 2 3
busan 4 5 6 7
daegu 8 9 10 11
incheon 12 13 14 15

 

new_df = df5.drop(['seoul', 'busan'])
new_df
one two three four
daegu 8 9 10 11
incheon 12 13 14 15

 

3) DataFrame에서 colum 삭제하기

  • column과 axis를 같이 줘야함
new_df = df5.drop('three', axis=1)
new_df
onetwofour
seoul013
busan457
daegu8911
incheon121315

 

new_df = df5.drop(['two', 'four'], axis=1)
new_df
onethree
seoul02
busan46
daegu810
incheon1214

 

'AI&BigData > Basics' 카테고리의 다른 글

Confusion matrix, accuracy, f1 score, precision, recall  (0) 2018.05.28
[Pandas] 정렬과 순위  (1) 2018.05.06
[Pandas] 함수 적용과 매핑  (0) 2018.05.06
[Pandas] Operation  (0) 2018.05.06
[Pandas] DataFrame  (0) 2018.04.30
[Pandas] Series 객체  (0) 2018.04.29
[Numpy] 브로드캐스트. 기타활용  (0) 2018.04.24
[Numpy] 자료형, type(), dtype, arange()  (0) 2018.04.24
[Numpy] 연산  (0) 2018.04.24