2017-10-07 16 views
0

J'ai le très simple. code suivant, et que vous souhaitez sélectionner toutes les équipes qui ont un highest_ranking de 1.Simple façon de convertir une série Pandas pour la comparaison des nombres entiers

import pandas as pd 
table = pd.read_table('team_rankings.dat') 
table.head() 

rank team rating highest_rank highest_rating 
0 1 Germany 2097 1 2205  
1 2 Brazil 2086 1 2161  
2 3 Spain 2011 1 2147  
3 4 Portugal 1968 2 1991  
4 5 Argentina 1967 1 2128 

type((table['highest_rank'])) 
pandas.core.series.Series 

table.loc[(table['highest_rank']) < 2] 

me donne alors un

TypeError: unorderable types: str() < int() 

depuis quelques enteries de highest_rank sont '-'. Urgh. Quel est un moyen simple d'effectuer cette sélection (entière) ??

Répondre

3

utilisateur pd.to_numeric avec errors ='coerce' i.e.

df.loc[(pd.to_numeric(df['highest_rank'],errors='coerce')) < 2] 

Sortie:

 
    rank  team rating highest_rank highest_rating 
0  1 Germany 2097    1   2205 
1  2  Brazil 2086    1   2161 
2  3  Spain 2011    1   2147 
4  5 Argentina 1967    1   2128 
3

Vous pouvez analyser le "-" comme valeur NaN. Cela pourrait vous aider pour d'autres tâches futures.

table = pd.read_table('team_rankings.dat', na_values="-") 

Voir https://pandas.pydata.org/pandas-docs/stable/generated/pandas.read_csv.html

+1

Lire les documents, par défaut de 'keep_default_na' vrai, alors il est automatiquement ajouté. Votre version est inutilement odeur de code. – mkastner

+0

@MaxU pendant la dernière moitié de l'année j'ai passé trop de temps à toujours lire les docs et on dirait qu'ils ont une solution pour tout ... – mkastner

+0

et @npross, avec ma solution vous aurez des entiers tout le temps, vous n'aurez jamais besoin pour les jeter pour toute tâche future. Seulement quand vous voulez visualiser la table, vous devez remplacer les valeurs NaN par les moins (si c'est comme cela que vous voulez le visualiser) – mkastner