프로그래밍/파이썬

EDA - 1단계 : 데이터 다루기 - 정렬, 결합

매 석 2023. 7. 11. 20:01
반응형

- 과거 내용

 

EDA - 1단계 : 데이터 다루기 - 비교, 필터링, 결측치

과거 내용 DataFrame - 비교, 필터링 1. 비교 40보다 큰 값은 True, 작거나 같은 값은 False로 나온다....

blog.naver.com

 

- DataFrame - 정렬

1. 값 정렬

#원본 데이터
      col1 col2  col3
row1    -3    A     7
row2  <NA>    C    36
row3     5    D    -5

#값 정렬
print(df.sort_values(by=['col1'],axis=0,ascending=True))

      col1 col2  col3
row1    -3    A     7
row3     5    D    -5
row2  <NA>    C    36

 

 

by는 어떤 부분을 정렬할 지 선택하고, axis는 행과 열을 선택하고,

ascending은 True일 때 오름차순, False일 때 내림차순 정렬한다.

이외에도 na_position, ignore_index, key, inplace 등의 옵션이 존재한다.

2. 인덱스 기준 정렬

#원본 데이터
      col1 col2  col3
row1    -3    A     7
row2  <NA>    C    36
row3     5    D    -5

#인덱스 기준 정렬
print(df.sort_index(axis=0, level=0,ascending=False))

      col1 col2  col3
row3     5    D    -5
row2  <NA>    C    36
row1    -3    A     7

 

마찬가지로 axis로 행과 열을 선택할 수 있고, level은 멀티 인덱스의 경우 사용하게 된다,

이외에도 ascending, sort_remaining, na_position, ignore_index 등이 존재한다.

3. 정렬 후 추출

#원본 데이터
      col1  col2  col3
row1    -3     1     7
row2     2     4    36
row3     5     6    -5

#정렬 후 출력
print(df.nlargest(2,columns="col2",keep="all"))

      col1  col2  col3
row3     5     6    -5
row2     2     4    36

 

처음에 n값을 넣어 몇 줄을 출력할 지 정한다. 이후 어떤 컬럼을 기준으로 할 지 정하고,

keep 옵션으로 중복되면 어떤 값을 출력할 지 정한다.

 

 

 

- DataFrame - 결합

1. 함수를 이용한 열 단위 결합

#원본 데이터
      col1  col2  col3
row1    -3     1     7
row2     2     4    36
row3     5     6    -5

      col1  col2  col3
row1  <NA>    25     3
row2     5     7     6
row3     2     3  <NA>

#열 단위 결합
print(df.combine(df2,np.maximum))

      col1  col2  col3
row1   NaN    25   7.0
row2   5.0     7  36.0
row3   5.0     6   NaN

 

combine을 사용하여 2개의 데이터프레임을 열 단위로 결합할 수 있다.

np.maximum을 사용해 겹치는 경우 더 큰 값을 결과값으로 가지게 하며,

NaN값은 fill_value를 통해 채워넣을 수 있다. 이외에도 overwrite 등의

옵션이 있다.

2. 결측치 덮어쓰기

#원본 데이터
      col1  col2  col3
row1    -3     1     7
row2     2     4    36
row3     5     6    -5

      col1  col2  col3
row1  <NA>    25     3
row2     5     7     6
row3     2     3  <NA>

#결측치 덮어쓰기
print(df2.combine_first(df))
      col1  col2  col3
row1  -3.0    25   3.0
row2   5.0     7   6.0
row3   2.0     3  -5.0

결측치가 있는 데이터그램에 combine_first를 사용하여 다른 데이터그램을 덮어쓰면

그 자리에 있는 결측치 값이 덮어써진다.

3. 인덱스기준 병합

#원본 데이터
      col2
row1     1
row2     2

      col1
row2     5
row3     7

#인덱스기준 병합
print(df.join(df2,how='right'))

      col2  col1
row2   2.0     5
row3   NaN     7

 

join을 사용해서 인덱스기준으로 병합한다. how는 왼쪽 혹은 오른쪽 어느 곳을

기준으로 병합할 것인지 정하는 것이다.

이외에도 sort, lsuffix, rsuffix 등의 옵션이 있다.

4. 객체병합

#원본데이터
  col2  NUM
0    B    6
1    C    7
2    D    8
  col1  NUM
0    A    2
1    B    4
2    C    5

#객체 병합
print(df.merge(df2,left_on='col2',right_on='col1'))

  col2  NUM_x col1  NUM_y
0    B      6    B      4
1    C      7    C      5

 

merge는 상당히 옵션이 많다. left_on과 right_on은 열의 이름을 입력하여

열 기준으로 병합할 수 있다. suffixes는 중복되는 열의 이름을 구분할 때 쓰인다.

left_index, right_index는 인덱스를 기준으로 병합할 때 쓰인다.

이외에도 how, indicator, validate 등이 있다.

5. 객체, 병합_결측제어

#원본 데이터
      col1  col2  col3
row1     1   2.0     3
row2     4   5.0     6
row3     7   NaN     9

      col2  col3  col4
row3    10  11.0    12
row4    13   NaN    15
row5    16  17.0    18

#객체 병합
print(df.align(df2,join='inner')[0])
print(df.align(df2,join='inner')[1])
      col2  col3
row3   NaN     9
      col2  col3
row3    10  11.0

 

align의 join은 left, right, inner 를 사용해서 어떻게 출력할 지 정한다.

결과의 NaN값은 fill_value를 통해서 값을 채워넣을 수 있다.

이외에도 method, limit, fill_axis, axis 등의 옵션이 있다.