[FIXED] Ein Fehler mit Float64-Werten während der Summe: „<“ wird zwischen Instanzen von „str“ und „int“ nicht unterstützt

Ausgabe

Die Aufgabe im Folgenden. Es ist notwendig, die mittlere Zeit aller Verspätungen für jede Fluggesellschaft (Fluggesellschaft) zu ermitteln. Negative Werte sollten nicht verwendet werden.

Flugdatensatz:

Carrier ArrDelay DepDelay

Car1 10 14
Car1 -3 0
Car2 20 13
Car2 14 15
Car3 -3 -1
Car3 2 1
Car3 -10 -3

Lösung (mit den Händen):

Car1: (10 + 14) / 2 = 12
Car2: (20 + 13 + 14 + 15) / 2 = 31
Car3: (2 + 1) / 3 = 0.66

Das Ausgabeergebnis sollte sein:

Car2 31
Car1 12
Car3 0.66

Einer der Benutzer schlug diese gute Lösung vor (vielleicht sieht er sie):

out = (
       df.mask(df.lt(0), 0)
          .assign(AverageAllDelay= lambda x: x['ArrDelay'].add(x['DepDelay']))
          .groupby('Carrier', as_index=False)['AverageAllDelay'].mean()
      )
print(out)

Aber da ist der Fehler '<' not supported between instances of 'str' and 'int'. Anfänglich ArrDelayund DepDelayhaben das float64Format aus der CSV-Datei. Ich habe diese Werte mit Hilfe zahlreicher Methoden aus anderen Stackoverflow-Themen in Integer konvertiert, aber nichts hat geholfen. Wie man es löst?

Datensatz (falls erforderlich, aber in der CSV-Datei werden alle Informationen zum Flug in einen String geschrieben):

data = {
        'Carrier ': {0: '1', 1: '1', 2: '2', 3: '2', 4: '3', 5: '3', 6: '3'}, 
        'ArrDelay': {0: 10, 1: -3, 2: 20, 3: 14, 4: -3, 5: 2, 6: -10}, 
        'DepDelay': {0: 14, 1: 0, 2: 13, 3: 15, 4: -1, 5: 1, 6: -3}
}

Lösung

Der Fehler tritt auf, weil df.mask(df.lt(0), 0)ein elementweiser Vergleich Ihres dfto durchgeführt wird 0und die 'Carrier'Spalte Ihres df Zeichenfolgen enthält.

Sie können es versuchen df['Carrier'] = df['Carrier'].astype(int)und dann wird Ihr Code ohne Fehler ausgeführt:

>>> out = (
...        df.mask(df.lt(0), 0)
...           .assign(AverageAllDelay= lambda x: x['ArrDelay'].add(x['DepDelay']))
...           .groupby('Carrier', as_index=False)['AverageAllDelay'].mean()
...       )
>>> out
   Carrier  AverageAllDelay
0        1             12.0
1        2             31.0
2        3              1.0


Beantwortet von –
Derek O


Antwort geprüft von –
Candace Johnson (FixError Volunteer)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like