일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- Apache
- Kotlin
- hive
- PANDAS
- google apps script
- Java
- Excel
- gas
- Python
- numpy
- array
- c#
- PostgreSQL
- Tkinter
- Google Excel
- list
- Google Spreadsheet
- Github
- SQL
- matplotlib
- django
- dataframe
- Mac
- 파이썬
- Redshift
- PySpark
- GIT
- string
- math
- Today
- Total
달나라 노트
Python Pandas : set_index (DataFrame의 index 변경하기) 본문
Python Pandas : set_index (DataFrame의 index 변경하기)
CosmosProject 2021. 7. 15. 00:31
DataFrame은 기본적으로 index가 0부터 1씩 증가하는 정수로 생성됩니다.
다만 set_index를 이용하면 DataFrame의 index를 원하는대로 변경할 수 있습니다.
Syntax
set_index(keys=[k1, k2, ...], inplace=True/False, drop=True/False)
사용법은 위와 같습니다.
keys=[k1, k2, ...]
index로 설정할 list 형태의 데이터입니다.
index는 보통 1줄이지만 2줄 3줄 또는 그 이상이 될 수도 있습니다. (다중 index가 가능하다는 의미입니다.)
k1은 index 한 줄 이라고 보시면 됩니다.
예를들어 총 10행의 데이터를 가진 DataFrame의 index를 변경하려면 k1의 자리에 [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] 처럼 DataFrame의 행 개수와 동일한 list, Series 또는 DataFrame의 column name 을 전달해야 합니다.
inplace=True/False
True --> set_index가 적용된 DataFrame 자체를 변경
False --> set_index가 적용된 DataFrame은 원본 그대로 두고 다른 변수에 set_index가 적용된 DataFrame을 할당
(False가 default 값입니다.)
drop=True/False
True --> set_index의 key에 사용된 column을 index로 옮기고 column에서 삭제
False --> set_index의 key에 사용된 column을 index로 옮기고 column에서도 유지
(True가 default 값입니다.)
import pandas as pd
dict_1 = {
'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': [11, 12, 13, 14, 15],
'col4': [16, 17, 18, 19, 20]
}
df_1 = pd.DataFrame(dict_1)
print(df_1)
df_2 = df_1.set_index(keys=['col1'], inplace=False, drop=False)
print(df_2)
df_3 = df_1.set_index(keys=['col1'], inplace=False, drop=True)
print(df_3)
-- Result
col1 col2 col3 col4
0 1 6 11 16
1 2 7 12 17
2 3 8 13 18
3 4 9 14 19
4 5 10 15 20
col1 col2 col3 col4
col1
1 1 6 11 16
2 2 7 12 17
3 3 8 13 18
4 4 9 14 19
5 5 10 15 20
col2 col3 col4
col1
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
위 예시를 봅시다.
set_index의 keys에는 ['col1']이 명시되어있습니다.
df_1에 존재하는 col1이라는 column의 data를 DataFrame의 index로 옮기겠다는 뜻입니다.
inplace=False임으로 보아
df_1 자체에는 변형을 가하지 않고, set_index를 적용한 후 df_2 또는 df_3에 할당하고있겠네요.
df_2와 df_3의 차이를 보면 drop이 True인지 False인지가 차이납니다.
df_2는 drop=False이므로 col1이 결과에서도 존재하지만
df_3는 drop=True이므로 index의 셋팅에 사용된 col1이 DataFrame에서 삭제된 것을 볼 수 있습니다.
import pandas as pd
dict_1 = {
'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': [11, 12, 13, 14, 15],
'col4': [16, 17, 18, 19, 20]
}
df_1 = pd.DataFrame(dict_1)
print(df_1)
df_4 = df_1.set_index(keys=['col1', 'col2'], inplace=False, drop=True)
print(df_4)
-- Result
col1 col2 col3 col4
0 1 6 11 16
1 2 7 12 17
2 3 8 13 18
3 4 9 14 19
4 5 10 15 20
col3 col4
col1 col2
1 6 11 16
2 7 12 17
3 8 13 18
4 9 14 19
5 10 15 20
index는 반드시 1개일 필요는 없습니다.
위 예시처럼 index를 2줄 또는 그 이상으로 설정할 수도 있습니다.
import pandas as pd
dict_1 = {
'col1': [1, 2, 3, 4, 5],
'col2': [6, 7, 8, 9, 10],
'col3': [11, 12, 13, 14, 15],
'col4': [16, 17, 18, 19, 20]
}
df_1 = pd.DataFrame(dict_1)
print(df_1)
s = pd.Series(['a', 'b', 'c', 'd', 'e'])
df_5 = df_1.set_index(keys=[s], inplace=False)
print(df_5)
l = ['f', 'g', 'h', 'i', 'j']
df_6 = df_1.set_index(keys=[l], inplace=False)
print(df_6)
-- Result
col1 col2 col3 col4
0 1 6 11 16
1 2 7 12 17
2 3 8 13 18
3 4 9 14 19
4 5 10 15 20
col1 col2 col3 col4
a 1 6 11 16
b 2 7 12 17
c 3 8 13 18
d 4 9 14 19
e 5 10 15 20
col1 col2 col3 col4
f 1 6 11 16
g 2 7 12 17
h 3 8 13 18
i 4 9 14 19
j 5 10 15 20
또한 단순히 keys의 인자로서 DataFrame내에 존재하는 column이 아닌
Series나 list를 전달할 수도 있습니다.
다만 DataFrame의 행 개수와 동일한 길이어야 합니다.
'Python > Python Pandas' 카테고리의 다른 글
Python Pandas : to_dict (DataFrame을 dictionary로 변환하기, Series를 dictionary로 변환하기, DataFrame dictionary 변환, Series dictionary 변환) (0) | 2021.07.15 |
---|---|
Python Pandas : transpose (DataFrame 행/열 뒤집기) (0) | 2021.07.15 |
Python Pandas : groupby & rolling (window function 흉내내기) (0) | 2021.07.02 |
Python Pandas : min, max (컬럼간의 값 비교하기) (0) | 2021.07.02 |
Python Pandas : contains (문자열의 포함여부 판단하기) (0) | 2021.06.30 |