2017-01-05 5 views
1

Ich habe folgende Pandas Datenrahmen:Probleme beim Filtern Pandas Dataframe nach Zeilenwerten?

Col 
0 [] 
1 [] 
2 [(foo, bar), (foo, bar)] 
3 [] 
4 [] 
5 [] 
6 [] 
7 [(foo, bar), (foo, bar)] 

Ich möchte alle leeren Listen entfernen (*):

Col 
2 [(foo, bar), (foo, bar)] 
7 [(foo, bar), (foo, bar)] 

Für die oben Ich habe versucht:

df = df.loc[df.Col != '[]'] 
df 

und

df.pipe(lambda d: d[d['Col'] != '[]']) 

Allerdings funktionierte keiner von ihnen. Also, meine Frage ist, wie kann ich alle leeren Listen aus dem Dataframe wie (*) entfernen ?.

Antwort

2

Slicing durch den Datenrahmen, als ob die Werte waren strings statt Listen arbeiten kann:

df[df.astype(str)['Col'] != '[]'] 
+1

Dieses tatsächlich funktioniert . Was ist los mit 'str'? – tumbleweed

+1

@tumbleweed Was meinst du mit "was ist los"? – LearningToPython

+0

'df.Col.str.', habe ich das auch vor dem Posten dieser Frage versucht. – tumbleweed

1

Sie die Länge der Listen mit .str Accessor überprüfen:

df[df.Col.str.len() != 0] 

#      Col 
#3 [(foo, bar), (foo, bar)] 
#6 [(foo, bar), (foo, bar)] 
Verwandte Themen