2017-03-16 18 views
0

Ich bin ein Anfänger bei Python und habe das Forum für die Antwort auf meine Frage ohne Erfolg durchsucht.Subtrahieren Zahlen von 2 Datenrahmen Spalten in Python

Ich habe eine Matrix und möchte die Zahlen aus einer Spalte von den Zahlen aus einer anderen Spalte subtrahieren und eine neue Spalte mit dem Ergebnis erstellen.

Ich habe versucht:

df['new column]=df['column 1']-df['column 2'] 

meine Ausgabe lautet: TypeError: unsupported operand type(s) for -: 'str' and 'str'

so dann diese Spalten auf ganze Zahlen zu konvertieren Ich habe versucht, vor der Subtraktion mit der folgenden Zeile ausführen:

df['column 2']=df['column 2'].astype(int) 

meine Ausgangs ist: ValueError: cannot convert float NaN to integer

(Ich habe ein paar NaN in meinem Datenrahmen). Ich habe dann versucht, mit eine leere Zeichenfolge mit dem folgenden Code alle der NaN zu ersetzen:

def remove_nan(s): 
    import math 
    """ remove np.nan""" 
    if math.isnan(s) == True: 
     s.replace(np.nan,"") 
    else: 
     return s 

df['column 1'] = df.apply(remove_nan, axis=0) 

Meine Ausgabe ist: Typeerror: ("cannot convert the series to <class 'float'>", 'occurred at index ID Number')

ich wäre es sehr zu schätzen, wenn jemand Einblick bieten könnte, wo Ich mache Fehler.

Vielen Dank für die Hilfe.

+0

fehlen Sie hier nach Antworten suchen können http://stackoverflow.com/questions/15118111/apply-function-to-each-row-of -pandas-dataframe-to-create-zwei-new-columns – Afaq

Antwort

0

Verwenden pd.to_numeric Zahlen mit dem Parameter errors='coerce' zu konvertieren nan zu geben, wenn es keine Zahl ist

Betrachten Sie die df

df = pd.DataFrame(dict(A=list('456 8'), B=list('1 345'))) 

print(df) 

    A B 
0 4 1 
1 5 
2 6 3 
3  4 
4 8 5 

Nach pd.to_numeric

df = df.apply(pd.to_numeric, errors='coerce') 

print(df) 

    A B 
0 4.0 1.0 
1 5.0 NaN 
2 6.0 3.0 
3 NaN 4.0 
4 8.0 5.0 

Jetzt können wir tun unsere Spalte Mathe

df['C'] = df.A - df.B 

print(df) 

    A B C 
0 4.0 1.0 3.0 
1 5.0 NaN NaN 
2 6.0 3.0 3.0 
3 NaN 4.0 NaN 
4 8.0 5.0 3.0 

Wenn Sie davon ausgehen, wollen Werte Null

df['C'] = df.A.sub(df.B, fill_value=0) 

print(df) 



    A B C 
0 4.0 1.0 3.0 
1 5.0 NaN 5.0 
2 6.0 3.0 3.0 
3 NaN 4.0 -4.0 
4 8.0 5.0 3.0 
Verwandte Themen