set_index : 특정 열을 인덱스로 사용하기

제목 그대로 특정 열을 인덱스로 사용할 수 있도록 한다. 원본은 변경하지 않으며 새 DF를 반환한다.

DF.set_index("열이름") DF.set_index([열, 열])

열을 여러개 지정하면 multi index라고 한다.

set_index를 쓰면 기존의 index는 삭제된다.


import pandas as pd

warship_data = [
    ["Dresden", "Germany", "Cruiser", 1],
    ["Karlsruhe", "Germany", "Cruiser", 3],
    ["Königsberg", "Germany", "Cruiser", 4],
    ["Kaiser", "Germany", "Battleship", 3],
    ["Bayern", "Germany", "Battleship", 5],
    ["König", "Germany", "Battleship", 4],
    ["Bismarck", "Germany", "Battleship", 7],
    ["Saint-Louis", "USA", "Cruiser", 2],
    ["Fubuki", "Japan", "Destoyer", 5],
    ["Nagato", "Japan", "Battleship", 6],
    ["Vanguard", "UK", "Battleship", 7],
    ["Clemson", "UK", "Destroyer", 3],
    ["Belfast", "UK", "Cruiser", 6],
    ["Le Fantasque", "France", "Destroyer", 7]
]

df = pd.DataFrame(warship_data,
                  columns=["Name", "Country", "Type", "Tier"])

df_name = df.set_index("Name")
df_multi = df.set_index(["Name", "Country"])

print("< 기본 index >")
print(df)

print("\\n< Name index >")
print(df_name)

print("\\n< Multi Index : Name, Country >")
print(df_multi)
< 기본 index >
            Name  Country        Type  Tier
0        Dresden  Germany     Cruiser     1
1      Karlsruhe  Germany     Cruiser     3
2     Königsberg  Germany     Cruiser     4
3         Kaiser  Germany  Battleship     3
4         Bayern  Germany  Battleship     5
5          König  Germany  Battleship     4
6       Bismarck  Germany  Battleship     7
7    Saint-Louis      USA     Cruiser     2
8         Fubuki    Japan    Destoyer     5
9         Nagato    Japan  Battleship     6
10      Vanguard       UK  Battleship     7
11       Clemson       UK   Destroyer     3
12       Belfast       UK     Cruiser     6
13  Le Fantasque   France   Destroyer     7

< Name index >
              Country        Type  Tier
Name
Dresden       Germany     Cruiser     1
Karlsruhe     Germany     Cruiser     3
Königsberg    Germany     Cruiser     4
Kaiser        Germany  Battleship     3
Bayern        Germany  Battleship     5
König         Germany  Battleship     4
Bismarck      Germany  Battleship     7
Saint-Louis       USA     Cruiser     2
Fubuki          Japan    Destoyer     5
Nagato          Japan  Battleship     6
Vanguard           UK  Battleship     7
Clemson            UK   Destroyer     3
Belfast            UK     Cruiser     6
Le Fantasque   France   Destroyer     7

< Multi Index : Name, Country >
                            Type  Tier
Name         Country
Dresden      Germany     Cruiser     1
Karlsruhe    Germany     Cruiser     3
Königsberg   Germany     Cruiser     4
Kaiser       Germany  Battleship     3
Bayern       Germany  Battleship     5
König        Germany  Battleship     4
Bismarck     Germany  Battleship     7
Saint-Louis  USA         Cruiser     2
Fubuki       Japan      Destoyer     5
Nagato       Japan    Battleship     6
Vanguard     UK       Battleship     7
Clemson      UK        Destroyer     3
Belfast      UK          Cruiser     6
Le Fantasque France    Destroyer     7

reindex : 행 인덱스 재배열

index의 배열을 새롭게 지정할 수 있다. 기존 행보다 더 많은 행을 넣어줬을 경우 모든 값이 NaN으로 들어간다.

NaN이외에 새로운 값을 초기화 하려면 fill_value옵션을 사용한다.

import pandas as pd

warship_data = [
    ["Dresden", "Germany", "Cruiser", 1],
    ["Karlsruhe", "Germany", "Cruiser", 3],
    ["Königsberg", "Germany", "Cruiser", 4]
]

df = pd.DataFrame(warship_data,
                  columns=["Name", "Country", "Type", "Tier"])

print("< 기본 index  >\\n", df)

df2 = df.reindex([1, 2, 3, 4, 5], fill_value=0)
print("\\n< 변경 index  >\\n", df2)
< 기본 index  >
          Name  Country     Type  Tier
0     Dresden  Germany  Cruiser     1
1   Karlsruhe  Germany  Cruiser     3
2  Königsberg  Germany  Cruiser     4

< 변경 index  >
          Name  Country     Type  Tier
1   Karlsruhe  Germany  Cruiser     3
2  Königsberg  Germany  Cruiser     4
3           0        0        0     0
4           0        0        0     0
5           0        0        0     0

reset_index : 인덱스 정수형으로 초기화

제목 그대로이다.

import pandas as pd

warship_data = [
    ["Dresden", "Germany", "Cruiser", 1],
    ["Karlsruhe", "Germany", "Cruiser", 3],
    ["Königsberg", "Germany", "Cruiser", 4],
    ["Kaiser", "Germany", "Battleship", 3],
    ["Bayern", "Germany", "Battleship", 5],
    ["König", "Germany", "Battleship", 4],
    ["Bismarck", "Germany", "Battleship", 7],
    ["Saint-Louis", "USA", "Cruiser", 2],
    ["Fubuki", "Japan", "Destoyer", 5],
    ["Nagato", "Japan", "Battleship", 6],
    ["Vanguard", "UK", "Battleship", 7],
    ["Clemson", "UK", "Destroyer", 3],
    ["Belfast", "UK", "Cruiser", 6],
    ["Le Fantasque", "France", "Destroyer", 7]
]

df = pd.DataFrame(warship_data,
                  columns=["Name", "Country", "Type", "Tier"])

df.set_index("Name", inplace=True)
print(df)
print()

df.reset_index(inplace=True)
print(df)
								Country        Type  Tier
Name
Dresden       Germany     Cruiser     1
Karlsruhe     Germany     Cruiser     3
Königsberg    Germany     Cruiser     4
Kaiser        Germany  Battleship     3
Bayern        Germany  Battleship     5
König         Germany  Battleship     4
Bismarck      Germany  Battleship     7
Saint-Louis       USA     Cruiser     2
Fubuki          Japan    Destoyer     5
Nagato          Japan  Battleship     6
Vanguard           UK  Battleship     7
Clemson            UK   Destroyer     3
Belfast            UK     Cruiser     6
Le Fantasque   France   Destroyer     7

            Name  Country        Type  Tier
0        Dresden  Germany     Cruiser     1
1      Karlsruhe  Germany     Cruiser     3
2     Königsberg  Germany     Cruiser     4
3         Kaiser  Germany  Battleship     3
4         Bayern  Germany  Battleship     5
5          König  Germany  Battleship     4
6       Bismarck  Germany  Battleship     7
7    Saint-Louis      USA     Cruiser     2
8         Fubuki    Japan    Destoyer     5
9         Nagato    Japan  Battleship     6
10      Vanguard       UK  Battleship     7
11       Clemson       UK   Destroyer     3
12       Belfast       UK     Cruiser     6
13  Le Fantasque   France   Destroyer     7

sort_index : index를 기준으로 정렬

행을 기준으로 DF의 순서를 정렬한다. ascending옵션으로 오름(내림)차순을 결정할 수 있다.