Mam ramkę danych pandy. Chcę wydrukować unikatowe wartości jednej z jego kolumn w porządku rosnącym. Oto jak to robię:
import pandas as pd
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]})
a = df['A'].unique()
print a.sort()
Problem polega na tym, że otrzymuję None
wyjście.
a.sort()
modyfikujea
i niczego nie zwraca, więc zamień na:a.sort(); print a
Odpowiedzi:
sorted
zwraca nową posortowaną listę z elementów w iterowalnej.KOD
import pandas as pd df = pd.DataFrame({'A':[1,1,3,2,6,2,8]}) a = df['A'].unique() print sorted(a)
WYNIK
[1, 2, 3, 6, 8]
źródło
sort
sortuje w miejscu, więc nic nie zwraca: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)
Musisz więc zadzwonić
print a
ponownie po wezwaniu dosort
.Na przykład.:
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]
źródło
Możesz także użyć drop_duplicates () zamiast unique ()
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]}) a = df['A'].drop_duplicates() a.sort() print a
źródło
drop_duplicates()
że jest 3 razy szybszy niż unique () w ramce danych zawierającej 14107693 wiersze [Pandas 0.18]Wolę oneliner:
print(sorted(df['Column Name'].unique()))
źródło
Sama sobie dzisiaj poradziłem z tym pytaniem. Myślę, że powodem, dla którego twój kod zwraca „Brak” (dokładnie to, co otrzymałem przy użyciu tej samej metody) jest to
wywołuje funkcję sortowania w celu zmiany listy a. W moim rozumieniu jest to polecenie modyfikacji. Aby zobaczyć wynik, musisz użyć print (a).
Moje rozwiązanie, ponieważ starałem się trzymać wszystko w pandach:
pd.Series(df['A'].unique()).sort_values()
źródło
pandas
rozwiązanie, ponieważ umieszczaNaN
wartości na końcu i działa z tablicami typów mieszanych.Sugerowałbym użycie sortowania numpy, ponieważ tak czy inaczej pandy robią w tle:
import numpy as np np.sort(df.A.unique())
Ale robienie wszystkiego w pandach jest również ważne.
źródło
Innym sposobem jest użycie ustawionego typu danych.
Niektóre cechy zestawów : zestawy są nieuporządkowane, mogą zawierać mieszane typy danych, elementy zestawu nie mogą się powtarzać, są modyfikowalne.
Rozwiązując twoje pytanie:
df = pd.DataFrame({'A':[1,1,3,2,6,2,8]}) sorted(set(df.A))
Odpowiedź w typie listy :
[1, 2, 3, 6, 8]
źródło