Breaking

2018년 10월 14일 일요일

python pandas.DataFrame.sort_values <별별정보>

python pandas.DataFrame.sort_values <별별정보>


pandas.DataFrame.sort_values- pandas 0.23.4 document API Reference

특징

데이터프레임을 정렬하기 위해 사용하는 함수로 by를 이용해 어떤 값을 기준으로 정렬할 것인가만 정해준다면 보기 쉽게 정렬이 가능하다.

변수

by : 어떤 값을 기준으로 정렬할 것인지를 정하는 것으로 주로 index나 column을 기준으로 정렬한다. 다수의 기준을 삼고싶다면 list 형태처럼 [] 안에 기준 순서대로 넣으면 정렬이 된다.

axis : 어떤 축을 기준을 삼아서 정렬할 것인가를 정하는 변수로 default는 0이다. (axis=0 : 2차원에서는 세로를 의미한다.) 일반적으로 by를 설정하면 자동으로 쓰기도 하며 주로 세로 column을 기준으로 많이 삼기 때문에 굳이 쓰이지는 않는다.

ascending : 오름차순이나 내림차순을 선택해서 예쁘게 정렬할 수 있도록 할 수 있는 변수이다. default :True이기 때문에 오름차순이 기본으로 설정되어 있다.

inplace : dataframe에 자동으로 저장할 수 있도록 돕는 변수로 사용하면 간편하다. default:False이기 때문에 true로 설정해야만 데이터프레임에 정렬한 것을 저장한다.

kind : default:quicksort로 quicksort, meargesort, heapsort 3개의 정렬 구현 방법을 선택할 수 있게 만들어져 있다. 이것은 작업 속도, 작업 효율성, 작업 공간에 있어 자신이 구현하고자하는 방향성에 맞게 선택할 수 있는 것인데 이와 관련해서 나같은 초보자는 아직 쓸 필요가 없기에 사용은 해도 데이터가 유의미하게 차이나지 않았기에 나중에 numpy.sort를 다룰 때 다시 다뤄보겠다.

참고로 정의에도 나와있지만 np.sort에 더 많은 정보가 있으니 찾아보라는 점을 가만해 아래에 링크를 실제로 가서 찾아보자.
numpy.sort

na_position : nan 데이터를 정렬할 때 처음에 정렬할지 마지막에 정렬할지를 결정하는 변로 default:last로 보통 마지막에 nan이 정렬되도록 설정되어 있다.

설명 순서

1. by
2. axis
3. ascending
4. inplace
5. na_position
kind 생략

사용할 데이터프레임 df


1. by

무엇을 기준으로 삼겠는가를 선택하는 것인데 열을 선택할수도 있고 인덱스를 선택할 수도 있습니다.

df.sort_values(by=['col1'])
df.sort_values(by=['col2','col4'])
df.sort_values(by='col3')


2. axis

어떤 축을 기준을 삼아서 정렬할 것인가를 정하는 변수로 default는 0이다.
axis=1은 가로를 이야기하고 axis=0은 세로를 이야기한다. 보통 0이 기본이므로 필자는 axis=1을 사용해볼텐데 이번에만 dataframe을 다른 것을 사용해서 보여드리겠다.

2-1)
axis=1을 설명하기에 앞서 가로를 축으로 사용하기 위해서는 그 type이 같아야한다. 왜 그런지 아래의 그림을 보면 이해가 될 것이다.

df
df.sort_values(by='c2',axis=1)

axis=1을 쓰면 index의 값을 by에 넣을 수 있다. 그러나 c2행을 보면 b, 7, 10.0으로 data type이 string, int, float가 섞여있다. int와 float는 서로 같이 쓸 수 있지만 string이 섞여있으면 오류가 뜰 수 밖에 없다.

2-2)
새로 사용하는 dataframe = df2
df2.sort_values(by=2,axis=1)

by=2가 의미하는 바는 index 2번 행을 axis=1은 가로를 축으로 사용하여 정렬하겠다는 의미이다. 때문에 열 순서가 col2, col1, col3 순으로 변형되면서 index 2번 행의 숫자가 2,5,7로 순서대로 되는 것을 말한다. 3번에서 설명하겠지만 ascending의 default=True이기때문에 오름차순으로 되었기때문에 2,5,7 순서가 되었다는 점 기억하시길

3. ascending

default=True로 자동으로 오름차순이지만 내림차순을 쓰고싶다면 ascending=False를 사용하면 된다.

df.sort_values(by=['col2'], ascending=False)
df.sort_values(['col2','col4'],ascending=[True,False])

 

4. inplace

default:False로 자동으로 저장이 되지않는다. 그러나 inplace=True면 데이터프레임이 정렬한 것처럼 변형된다.

df.sort_values(by=['col2'])
df
df.sort_values(by=['col2'],inplace=True)
df

위에서 본 것처럼 알겠지만 단순히 sort_values를 하는 것은 데이터프레임에 저장이 되지않는 것을 1,2번 이미지에서 확인이 가능하다. 그러나 inplace=True하고 df를 보면 원하는 정렬대로 저장된 것이 확인가능하다.

5. na_position

default:last로 nan데이터는 마지막에 정렬하는 되지만 앞에 nan 데이터를 정렬하고 싶다면 na_position='first'를 사용하면 앞에 정렬된 것을 확인할 수 있다.

df.sort_values(by='col1', na_position='last') #굳이 쓸필요 없음 default
df.sort_values(by='col1', na_position='first')

kind 생략

 ALL RIGHT RESERVED TWINSTARINFO