2017-01-03 1 views
1

Ich muss Werte greifen, wo die Spalte entweder mit Wert 'MA', 'KP' beginnt.Abfrage Datenrahmenspalte auf String Werte

ich Kette versuche meine Datenrahmen Abfrage als solche:

df.loc[df['REFERRAL_GRP'].str.startswith("KP")==True | df['REFERRAL_GRP'].str.startswith("MA")==True] 

Dies gilt nicht zu funktionieren scheint, da die Spalte pd.nan Objekte (NULL-Werte) enthält.

Von sich aus funktionieren die Abfragen, wie kann ich diese beiden Abfragen zusammenführen?

Danke

Hier meine Fehlermeldung lautet:

Traceback (most recent call last): Debug Probe, prompt 40, line 1 File "c:\Python27\Lib\site-packages\pandas\core\generic.py", line 892, in __nonzero__ .format(self.__class__.__name__)) ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

+0

Also, die * Spaltenname * mit beginnen muss entweder "MA" oder "KP?" Warum versuchen Sie dann die Werte zu nehmen, die mit "MA" oder "KP" beginnen? Ihre Frage und Ihr Versuch stehen im Widerspruch zueinander. – blacksite

+0

wird dieser Ausdruck in einem if, for oder einer anderen Bedingung verwendet? – e4c5

Antwort

1

Dies ist eine Frage, die wir viel zu sehen.

df.loc[ 
    # 2. This returns a whole lot of `True`s or `False`s 
    df['REFERRAL_GRP'].str.startswith("KP")==True 
    # 1. `|` is expecting a `True` or `False` 
    | 
    # 2. This returns a whole lot of `True`s or `False`s 
    df['REFERRAL_GRP'].str.startswith("MA")==True 
] 

es Fix von Bedingungen mit Klammern

df.loc[ 
    # 1. Series of `True`s or `False`s 
    (df['REFERRAL_GRP'].str.startswith("KP")==True) 
    # 2. `|` is now a operator on `pd.Series` and is expecting `pd.Series` 
    | 
    # 1. Series of `True`s or `False`s 
    (df['REFERRAL_GRP'].str.startswith("MA")==True) 
] 

Einwickeln Das heißt, würde ich das tun

df.loc[df.REFERRAL_GRP.str.match('^KP|MA')] 
2

versuchen numpy logical_or

import numpy as np 
df.loc[np.logical_or(df['REFERRAL_GRP'].str.startswith("KP")==True , df['REFERRAL_GRP'].str.startswith("MA")==True)] 
+0

Ich werde es versuchen, danke –

Verwandte Themen