2017-03-07 3 views
-1

Ich versuche Zeilen innerhalb der Spalte sample.single zu sortieren, indem ich ('./.') Ausschließe. Alle Datentypen sind Objekte. Ich habe die folgenden Optionen versucht. Ich vermute, dass der Sondercharakter den zweiten Versuch kompromittiert. Dataframe besteht aus 195 Spalten.Sortierreihenfolge nach logischen Bedingungen pandas

Meine gtdata Spalten:

Index ([ 'sample.single', 'sample2.single', 'sample3.single'] dtype = 'Objekt')

Bitte beraten, danke!

gtdata = gtdata[('sample.single')!= ('./.') ] 

I erhalten einen Schlüssel Fehler: KeyError: Wahre

Wenn ich versuche:

gtdata = gtdata[gtdata.sample.single != ('./.') ] 

ich ein Attribut Fehlermeldung an:

Attribute: Objekt 'Dataframe' hat kein Attribut 'single'

+1

Nicht sicher, was Sie versuchen zu tun. Geben Sie ('sample.single')! = ('./.') In den Interpreter ein. Es wird True zurückgeben. Sie sollten herausfinden können, warum. Das bedeutet, dass gtdata [('sample.single')! = ('./.')] Bedeutet, dass Sie versuchen, gtdata [True] zu bewerten. Vermutlich macht das keinen Sinn. – Denziloe

Antwort

0

Nicht 100% sicher, was Sie erreichen möchten, aber vorausgesetzt, Sie haben Zellen mit dem "./." Zeichenfolge, die Sie herausfiltern möchten, ist die unten einen Weg, es zu tun:

import pandas as pd 

# generate some sample data 
gtdata = pd.DataFrame({'sample.single': ['blah1', 'blah2', 'blah3./.'], 
         'sample2.single': ['blah1', 'blah2', 'blah3'], 
         'sample3.single': ['blah1', 'blah2', 'blah3']}) 

# filter out all cells in column sample.single containing ./. 
gtdata = gtdata[~gtdata['sample.single'].str.contains("./.")] 

Wenn Pandas subsetting in sollten Sie einen boolean Vektor mit der gleichen Dimension wie der Datenrahmen werden übergeben.

Das Problem mit Ihrem ersten Ansatz war, dass ('sample.single')!=('./.') in einen einzelnen booleschen Wert im Gegensatz zu einem booleschen Vektor ausgewertet wird. Sie vergleichen auch zwei Strings, keine Spalte im DataFrame.

Das Problem mit Ihrem zweiten Ansatz ist, dass gtdata.sample.single macht keinen Sinn in Pandas Syntax. Um die sample.single Spalte zu erhalten, auf die Sie sich beziehen müssen, ist wie gtdata ['sample.single']. Wenn Ihr Spaltenname kein "." Enthält, können Sie die Abkürzung verwenden, die Sie verwenden wollten: z. gtdata.sample_single.

Ich empfehle die Überprüfung der documentation für die Subsettierung von Pandas DataFrames.

+0

Danke Ido! Ich musste nur ein '\' hinzufügen, um den Sonderzeichen in Ihrem Code zu entgehen, funktioniert aber! [gtdata = gtdata [~ gtdata ['sample.single']. Str.contains ('\ ./.')]] – lager

Verwandte Themen