2017-10-07 4 views
0

Ich habe das sehr einfach. folgenden Code, und möchten uns bei allen Teams wählen, die eine highest_ranking von 1.Einfache Möglichkeit, eine Pandas-Serie für Integer-Vergleich zu konvertieren

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] 

haben gibt mir dann eine

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

da einige highest_rank ente sind '-'. Urgh. Was ist eine einfache Möglichkeit, diese (ganzzahlige) Auswahl durchzuführen?

Antwort

3

Benutzer pd.to_numeric mit errors ='coerce' d.h

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

Ausgang:

 
    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

Sie können die parsen "-" als einen NaN-Wert. Das könnte Ihnen bei zukünftigen Aufgaben helfen.

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

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

+1

die Dokumentation lesen, 'keep_default_na' standardmäßig true, damit diese automatisch angehängt wird. Ihre Version ist unnötig Code-Geruch. – mkastner

+0

@MaxU während des letzten halben Jahres Ich verbrachte zu viel Zeit immer die Dokumente zu lesen und es fühlt sich an, als ob sie eine Lösung für alles ... – mkastner

+0

und @npross haben, mit meiner Lösung werden Sie ganze Zahlen haben, die Sie nie brauchen werden um sie für zukünftige Aufgaben zu nutzen. nur wenn Sie die Tabelle visualisieren möchten, müssen Sie die NaN-Werte durch das Minuszeichen ersetzen (wenn Sie es so darstellen möchten) – mkastner

Verwandte Themen