Data miner/Development log

[python] [pandas] index 활용하기

carayoon 2020. 10. 15. 16:42
728x90

- Dataframe의 index는 데이터의 로우와 칼럼에 대한 이름 등을 저장하는 객체이다. 

보통 특별히 index값을 정하지 않으면, 0부터의 순차적인 정수값을 가진다. 정수값뿐만이 아니라, 문자열의 값도 가질 수 있다. 

dataframe.index 
# Index([0,1,2, ... , '날짜', '2020-10-15')
  • Index 가장 일반적인 index 객체, 파이썬의 numpy 배열 형식
  • MultiIndex 단일 축에 여러 단계의 색인을 표현하는 계층적 색인 객체. 튜플의 배열과 유사
  • DatetimeIndex 나노초 타임스태프를 저장
  • PeriodIndex 기간 데이터에 대한 Index

 

 

- 한번 설정한 색인은 변경할 수 없다. 

dataframe.index[0] = 'new index value' 
#TypeError가 발생!

 

- 색인 기능으로 특정 로우(행)들을 index로 슬라이싱해서 지울 수 있다. dataframe의 drop함수를 사용하며, 인자로 삭제할 행의 index를 정보를 넣어주면 된다. 아래 코드의 예시는 정수로 인덱싱된 dataframe의 136번 부터 이후의 index값을 지워준다는 코드다. 

dataframe.drop(dataframe.index[136:]) 

 

- dataframe의 특정 행의 컬럼값들을 보고자 할 때, 특정 행의 위치를 안다면 dataframe.iloc[i]를 사용하며,

특정 행의 색인 값을 알고 있다면 dataframe.loc['색인값']을 사용한다. 다만, dataframe.iloc[i]을 사용할 때, 첫번째 행의 위치는 0이기 때문에 5번째 행의 정보가 궁금하다면 5-1=4로 검색해야 한다. dataframe.iloc['n번째 행'-1]

 

mydict = [{'a': 1, 'b': 2, 'c': 3, 'd': 4},
          {'a': 100, 'b': 200, 'c': 300, 'd': 400},
          {'a': 1000, 'b': 2000, 'c': 3000, 'd': 4000 }]
df = pd.DataFrame(mydict)
print(df)
      a     b     c     d
0     1     2     3     4
1   100   200   300   400
2  1000  2000  3000  4000


df.iloc[0] #첫번째 행의 값을 보고자 할 때
a    1
b    2
c    3
d    4

df.iloc[[,]] #복수의 행의 값을 보고자 할 때는 리스트 형태로 값을 iloc안에 넣어준다. 

 

 

- 이미 존재하는 dataframe에 새로운 행을 추가하고자 할 때, 아래의 코드를 사용한다. ignore_index는 이전 dataframe의 index와 상관없이 0,1,2,... 로 정수형태로 인덱싱된다. ignore_index=False로 사용하고자 할 때에는 Series의 자료형 형태로 값을 넣어줘야 하며, 해당 Series는 이름을 가지고 있어야 한다. 

 


#append하고자 하는 dataframe의 index를 유지하지 않을 경우

new_row = {'a':500, 'c':400}  #<- 새롭게 추가할 행에 값을 지정해서 넣고자 할 때, dic형태로 '특정 컬럼' : '값'의 형태로 넣는다. 
df = df.append(new_row, ignore_index=True)

#append하고자 하는 dataframe의 index를 유지하고자 할 경우
new_row = {'a':500, 'c':400} 
new_row = pd.Series(new_row, name='something name')
df = df.append(new_row, ignore_index=False)

 

- 재색인 할 수 있다. 

df = df.reindex([새로운 index순서를 포함한 리스트를 넣는다])

#만약, 재색인할 때, 기존의 dataframe에 존재하지 않은 색인일 경우 디폴트값은 NaN으로 저장되나
#특정값으로 지정할 수도 있다. 

#아래의 코드는 0으로 채우겠다는 것
df = df.reindex([새로운 index순서를 포함한 리스트를 넣는다], fill_value=0)