HOWTO · Pandas
Ottieni valori unici Pandas in colonna e ordinali
Questo tutorial mostra come trovare valori univoci di una colonna in Pandas DataFrame e come ordinarli
In questa pagina
Una colonna di un DataFrame è una Series di Pandas. Chiama la funzione unique() function per ottenere i valori distinti nell’ordine in cui compaiono per la prima volta. Usa drop_duplicates() se ti servono le righe corrispondenti e le altre colonne, oppure ordina i valori o le righe con sorted() di Python o con sort_values() di Pandas.
Gli esempi usano un unico DataFrame di piccole dimensioni, con professioni e reparti. Esegui questo esempio:
Nei tre esempi, i nomi delle colonne e i valori testuali del codice e degli output restano in inglese.
import pandas as pd
df = pd.DataFrame({
"profession": ["designer", "engineer", "designer", "analyst"],
"department": ["product", "platform", "research", "finance"],
})
professions = df["profession"].unique()
print(professions)
print(type(professions).__name__)
<StringArray>
['designer', 'engineer', 'analyst']
Length: 3, dtype: str
StringArray
Ottieni i valori univoci da una colonna di un DataFrame
Selezionando df["profession"] ottieni una Series. La sua funzione unique() restituisce un valore per ogni professione distinta, nell’ordine in cui compare per la prima volta; non ordina i valori. Il tipo concreto del risultato dipende dal dtype della Series. In questo esempio i valori usano il dtype stringa di estensione di Pandas, quindi il risultato è una StringArray, come mostra l’output. Altri dtype possono produrre un array NumPy o un altro array di estensione. Adatta il nome della colonna ai tuoi dati. Se ti serve solo il numero di valori distinti, usa len(df["profession"].unique()); len(df) conta invece le righe, comprese quelle con professioni ripetute. Converti il risultato con .tolist() se il passaggio successivo richiede specificamente una normale lista Python.
Mantieni una riga per ogni valore univoco della colonna
Se l’obiettivo è conservare i record anziché ottenere soltanto una raccolta di valori, chiama drop_duplicates(subset="profession") sul DataFrame. Il risultato è ancora un DataFrame: ogni riga conservata include il proprio reparto e, per impostazione predefinita, viene mantenuta la prima riga per ogni professione. Nell’output mostrato, i nomi delle colonne e i valori testuali sono in inglese. Viene rimossa la seconda riga con la professione designer, mentre restano la prima riga designer e il relativo reparto product. Questo metodo non sceglie una riga rappresentativa secondo un criterio diverso; se vuoi conservare un altro record, prima ordina le righe o selezionale in altro modo. Per impostazione predefinita, il risultato mantiene le etichette dell’indice originale, che quindi può presentare delle lacune. Puoi passare a subset una lista con più nomi di colonna quando i record duplicati sono definiti da una combinazione di colonne.
Il codice e le etichette o gli output visibili in questa sezione restano in inglese.
import pandas as pd
df = pd.DataFrame({
"profession": ["designer", "engineer", "designer", "analyst"],
"department": ["product", "platform", "research", "finance"],
})
unique_rows = df.drop_duplicates(subset="profession")
print(unique_rows.to_string(index=False))
print(type(unique_rows).__name__)
profession department
designer product
engineer platform
analyst finance
DataFrame
Ordina i valori univoci o le righe del DataFrame
La funzione integrata sorted() di Python restituisce una nuova lista di valori in ordine crescente. Per ordinare i valori distinti, combinala con unique(); se invece vuoi mantenere i duplicati, ordina direttamente la Series. Per l’ordine decrescente, passa reverse=True a sorted().
Usa sort_values(by="profession") se vuoi ordinare le righe mantenendo insieme le altre colonne. Il risultato è un DataFrame e l’ordinamento è crescente per impostazione predefinita; imposta ascending=False per l’ordine decrescente. Sono due alternative: ordinare i valori univoci produce una lista, mentre ordinare le righe conserva i dati di ogni riga. Puoi passare a by una lista per ordinare in base a più colonne, in ordine di priorità. Le liste mostrate contengono soltanto i valori delle professioni; nell’ultimo output, i nomi delle colonne e i valori testuali restano in inglese, e ogni riga conserva il proprio reparto mentre le professioni sono ordinate da engineer ad analyst. sort_values() mantiene le etichette dell’indice originale, a meno che tu non richieda ignore_index=True, che crea un nuovo indice sequenziale per il risultato ordinato.
import pandas as pd
df = pd.DataFrame({
"profession": ["designer", "engineer", "designer", "analyst"],
"department": ["product", "platform", "research", "finance"],
})
print(sorted(df["profession"].unique()))
print(sorted(df["profession"].unique(), reverse=True))
print(df.sort_values(by="profession", ascending=False).to_string(index=False))
['analyst', 'designer', 'engineer']
['engineer', 'designer', 'analyst']
profession department
engineer platform
designer product
designer research
analyst finance