2017-06-20 5 views
1

Ich muss diese for-Schleife in ein Listenverständnis umwandeln. Diese for-Schleife iteriert durch einen Datenrahmen jede Zeile zu finden, wo der Eintrag für Spalte 'TL' enthält „J“ und Spalte 'Ink' = 0 und löschen Sie die ganze Zeile:Wie konvertiert man diese Python for-Schleife in ein Listenverständnis?

for r in df.T: 
    if 'J' in df.loc[r,'TL'] and df.loc[r,'Ink'] == 0: 
     df.drop(r) 
    else: 
     continue 

ich diese

df_clean = [ 
    df.drop(r) for r in df.T if 'J' in df.loc[r,'TL'] and df.loc[r,'Ink'] == 0 
] 

versucht haben, ich erhalte eine Fehlermeldung,

ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

+0

Haben Sie etwas versucht? Geben Sie es eine Chance, wenn Sie nicht haben, dann kommen Sie zurück, wenn Sie Hilfe brauchen. Wenn Sie haben, zeigen Sie uns. – jacoblaw

+0

Sind Sie wirklich sicher, dass Sie ein Listenverständnis haben möchten? Selbst wenn Sie davon ausgehen, dass es funktioniert, sieht es so aus, als würden Sie mit einer Liste von DataFrame-Objekten enden, eines für jedes "r" in "df.T". Was stimmt überhaupt nicht mit einer 'for'-Schleife? –

+0

Ich möchte ein Listenverständnis verwenden, weil die Datensätze, mit denen ich arbeite, riesig sind und eine 'for'-Schleife ewig dauern würde. –

Antwort

2

Versuchen:

df[~(df.TL.str.contains('J') & df.Ink.eq(0))] 
+0

Das schien zu funktionieren! Ich muss die Datendatei seit seiner riesigen (700.000 Zeilen) überprüfen, aber es sieht gut aus. Vielen Dank! –

Verwandte Themen