프로그래밍/파이썬

EDA - 1단계 : 데이터 다루기 - 멀티인덱스, 반복

매 석 2023. 7. 22. 16:22
반응형

- 과거내용

 

EDA - 1단계 : 데이터 다루기 - 시간

과거내용 DataFrame - 시간 1. 특정시간 필터링(1) at_time을 사용해서 시간이 06:00인 것만 필터링되어 ...

blog.naver.com

 

- DataFrame - 멀티인덱스

 

1. 하위분류변환

#원본데이터
                col1  col2
row1 row2 row3
A    X    a        0     5
          b        1     6
     Y    b        2     7
B    Y    c        3     8
     Z    d        4     9

#하위분류변환
print(df.xs(key=('B','Y')))

      col1  col2
row3
c        3     8

 

xs를 통해서 하위분류변환을 할 수 있다.

위는 B와 Y를 차례대로 만족하는 하위값만 출력되게 해준다.

drop_level을 False로 할 경우 key에 포함된 레벨도 출력한다.

2. 피벗화

#원본데이터
                col1  col2
row1 row2 row3
A    X    a        0     5
          b        1     6
     Y    b        2     7
B    Y    c        3     8
     Z    d        4     9

#피벗화
print(df.stack())

A     X     a     col1    0
                  col2    5
            b     col1    1
                  col2    6
      Y     b     col1    2
                  col2    7
B     Y     c     col1    3
                  col2    8
      Z     d     col1    4
                  col2    9
dtype: int64

 

 

stack을 통해서 피벗화를 할 수 있다.

옵션으로 level을 선택할 수 있는데 해당하는 열의 인덱스로 피벗화 된다.

기본값은 -1인 최하위 레벨이다.

3. 언피벗화

#원본 데이터
row1  row2  row3      
A     X     a     col1    0
                  col2    5
            b     col1    1
                  col2    6
      Y     b     col1    2
                  col2    7
B     Y     c     col1    3
                  col2    8
      Z     d     col1    4
                  col2    9
dtype: int64

#언피벗화
print(df.unstack())

                col1  col2
row1 row2 row3
A    X    a        0     5
          b        1     6
     Y    b        2     7
B    Y    c        3     8
     Z    d        4     9

 

 

피벗화한 것을 다시 푸는 과정이다. unstack을 사용한다.

마찬가지로 level를 옵션으로 지정해서 언피벗화할 수 있다.

4. 인덱스 순서변경

#원본데이터
                col1  col2
row1 row2 row3
A    X    a        0     5
          b        1     6
     Y    b        2     7
B    Y    c        3     8
     Z    d        4     9

#인덱스 순서변경
print(df.swaplevel(0))

row3 row2 row1
a    X    A        0     5
b    X    A        1     6
     Y    A        2     7
c    Y    B        3     8
d    Z    B        4     9

swaplevel을 통해 인덱스 순서를 변경할 수 있다.

옵션으로 0을 입력하면 level0인 값이 선택되어 최하위 인덱스 레벨과 교환된다.

i와 j를 사용하며 원하는 순서대로 변경할 수도 있다.

5. 인덱스제거

#원본데이터
                col1  col2
row1 row2 row3
A    X    a        0     5
          b        1     6
     Y    b        2     7
B    Y    c        3     8
     Z    d        4     9

#인덱스제거
print(df.droplevel(axis=0, level=1))

           col1  col2
row1 row3
A    a        0     5
     b        1     6
     b        2     7
B    c        3     8
     d        4     9

 

droplevel을 통해서 인덱스를 제거할 수 있다.

우선 행과 열을 axis로 선택하고, 어느 level을 제거할 지 고른다.

level은 기본적으로 0이 최상위 인덱스를 의미한다.

 

 

- DataFrame - 반복

1. 열 인덱스 반복

#원본 데이터
   col1  col2
0     1     3
1     2     4

#열 인덱스 반복
df=df.__iter__()
print(list(df))

['col1', 'col2']

 

__iter__를 통해 열 인덱스의 리스트를 추출한다.

이후 list를 통해 열을 확인할 수 있고, next를 통해 하나의 값을 얻을 수 있다.

2. 열과 내용 반복

#원본 데이터
   col1  col2
0     1     3
1     2     4

#열과 내용 반복
df=df.items()
for i in df:
    for j in i:
        print(j)

col1
0    1
1    2
Name: col1, dtype: int64
col2
0    3
1    4
Name: col2, dtype: int64

 

items()를 통해 값들을 추출하고 이후 for문을 통해

값들을 하나씩 꺼내어 출력할 수 있다.

3. 행과 내용 반복

#원본 데이터
   col1  col2
0     1     3
1     2     4

#행과 내용 반복
df=df.iterrows()
for i in df:
    for j in i:
        print(j)

col1    1
col2    3
Name: 0, dtype: int64
1
col1    2
col2    4
Name: 1, dtype: int64

 

iterrows를 사용해서 행과 내용을 반복할 수 있다.

items와 같이 for문을 이용해서 값들을 출력할 수 있다.

5. 튜플형태 반복

#원본 데이터
   col1  col2
0     1     3
1     2     4

#튜플형태 반복
df=df.itertuples()
print(list(df))

[Pandas(Index=0, col1=1, col2=3), Pandas(Index=1, col1=2, col2=4)]

 

itertuples를 사용해서 튜플정보를 얻고

리스트로 출력할 수 있다.