2017-08-01 2 views
0

Wenn ich versuche, str.mtach auf leere Werte zu verwenden, ignoriert es einfach die Leerzeichen alle zusammen.str.match ignorieren leere Werte

Bevor ich auf eine If-Anweisung zurückgreife, möchte ich sehen, ob ich Hilfe bekommen kann, um diese herauszufinden.

Ich habe einen Weg gefunden, um zu bekommen, was ich will mit einer if else-Anweisung. Das Problem ist jedoch, dass ich immer noch zurückgehen und alle Werte durchsehen muss, die "Nein" zugeordnet wurden. Wo, wenn ich in der Lage wäre, das oben genannte Arbeiten zu bekommen, würde ich nur nach den Lücken filtern müssen, um zu sehen, welche Werte im str.match hinzugefügt werden müssen.

+0

Warum hast du „‚‘“ setzen, wenn Sie versuchen, eine leere Zeichenfolge übereinstimmen? –

+0

Ich versuchte df ["Suit Filed (Y/N)"] [df ["Original Litigation"]. Str.match ("N | Nein | ', case = False)] =' Nein 'und alles wird zugeordnet" No " – Bjc51192

Antwort

2

könnten Sie das Muster regex verwenden ^$ (beginning-of-String gefolgt von End-of-string) leere Saiten zum Spiel:

mask = df["Original Litigation"].str.match("N|^$", case=False) 
df.loc[mask, "Suit Filed (Y/N)"]='No' 

oder alternativ Sie str.len nutzen, um die Länge zu messen der Saiten:

s = df["Original Litigation"] 
mask = s.str.match("N", case=False) | (s.str.len() == 0) 

Zum Beispiel

In [311]: s = pd.Series(['a','','c']) 

In [312]: s.str.match('a|^$') 
Out[312]: 
0  True 
1  True 
2 False 
dtype: bool 

Beachten Sie, dass die RegexMuster N|No wird alles akzeptiert, die mit einem N oder beginnt mit No beginnt. Da No mit N beginnt, entspricht das Muster N|NoN - das No ist nicht erforderlich. In ähnlicher Weise kann Yes|Y|represented|Open|Closed auf Y|represented|Open|Closed reduziert werden.


By the way, feststellen, dass es zwei Sätze von Klammern ([...][...]) in

df["Suit Filed (Y/N)"][...] = 'No' 

Dies wird angekettet-Indizierung genannt und sollte vermieden werden, wenn da in einigen Situationen Zuweisungen in Pandas machen such an assignment may fail to modify df .

Der richtige Weg, dies in Pandas zu codieren, verwenden loc:

df[mask, "Suit Filed (Y/N)"] = 'No' 
+0

Arbeitete wie ein Zauber, Danke. Würdest du zufällig wissen, warum ich [" Suit Filed (Y/N) "] [df [" Ursprüngliches Rechtsstreit "]. Str.match (" N | No | ', case = False)] = 'Nein' funktioniert nicht? Ich verstehe nicht, warum es alles auf "Nein" abbildet. – Bjc51192

+0

'N | No |' sagt 'match', um' N' oder 'No' oder ... nothing zu entsprechen. Nichts passt immer zusammen. – unutbu

+0

Ah, ich verstehe. Danke unutbu. – Bjc51192