열에서 고유 한 값을 찾은 다음 정렬


82

팬더 데이터 프레임이 있습니다. 열 중 하나의 고유 값을 오름차순으로 인쇄하고 싶습니다. 이것이 내가하는 방법입니다.

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()

문제는 내가 None출력을 얻고 있다는 것 입니다.


4
a.sort()수정 a: 아무것도 반환하지 않습니다 그래서으로 대체a.sort(); print a
stellasia

답변:


120

sortediterable의 항목에서 새로운 정렬 목록을 반환합니다.

암호

import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print sorted(a)

산출

[1, 2, 3, 6, 8]

19

sort 제자리에 정렬하므로 아무것도 반환하지 않습니다.

In [54]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
a

Out[54]:
array([1, 2, 3, 6, 8], dtype=int64)

따라서에 전화 print a한 후 다시 전화해야 sort합니다.

예 :

In [55]:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
a.sort()
print(a)

[1 2 3 6 8]

11

unique () 대신 drop_duplicates () 를 사용할 수도 있습니다.

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].drop_duplicates()
a.sort()
print a

3
실측치 drop_duplicates()[0.18 팬더] 고유보다 빠르게 () 14,107,693 행 dataframe 3 배로
fixxxer

7

나는 oneliner를 선호합니다.

print(sorted(df['Column Name'].unique()))

6

오늘 직접 질문을 보았습니다. 귀하의 코드가 '없음'(정확히 동일한 방법을 사용하여 얻은 것)을 반환하는 이유는

a.sort()

목록을 변경하기 위해 정렬 함수를 호출하고 있습니다. 내 이해에서 이것은 수정 명령입니다. 결과를 보려면 print (a)를 사용해야합니다.

내 솔루션은 모든 것을 팬더에 보관하려고 시도했습니다.

pd.Series(df['A'].unique()).sort_values()

마지막 pandasNaN값을 넣고 혼합 유형의 배열로 작동 하기 때문에 솔루션이 마음에 듭니다 .
HS- 성운

4

어쨌든 pandas가 백그라운드에서 수행하는 작업이므로 numpy의 정렬을 사용하는 것이 좋습니다.

import numpy as np
np.sort(df.A.unique())

그러나 팬더에서 모든 작업을 수행하는 것도 유효합니다.


0

또 다른 방법은 세트 데이터 유형을 사용하는 것입니다 .

세트의 일부 특성 : 집합은 순서가 지정되지 않고 혼합 된 데이터 유형을 포함 할 수 있으며 집합의 요소는 반복 될 수 없으며 변경 가능합니다.

질문 해결 :

df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
sorted(set(df.A))

목록 유형 의 답변 :

[1, 2, 3, 6, 8]
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.