[python] [pandas] index 활용하기
- 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)