2017-08-01 9 views
0

ブランク値でstr.mtachを使用しようとしているときに、ブランク値をすべて無視するだけです。str.matchブランク値を無視する

If文を使用する前に、私はこの文を理解する助けを得ることができますか?

df={'Original Litigation':['yes','','','',"No"]} 
df=pd.DataFrame(df) 
df["Suit Filed (Y/N)"]="" 
df["Suit Filed (Y/N)"][df["Original Litigation"].str.match("Yes|Y|represented|Open|Closed",case=False)]='Yes' 
df["Suit Filed (Y/N)"][df["Original Litigation"].str.match("N|No|''",case=False)]='No' 

if else文を使用して私が望むものを得る方法を見つけました。しかし問題は、私はまだ戻って、「いいえ」にマップされたすべての値を調べなければならないということです。上記の作業ができたら、str.matchにどの値を追加する必要があるかを調べるために空白をフィルタリングするだけで済みます。あなたは長さを測定するためにstr.lenを使用することができ、その代わりに、

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

のか:

+0

あなたは空の文字列に一致するようにしようとしているのに、なぜあなたは「『』」を入れたのですか? –

+0

str.match( "N | No | '、case = False)] ='いいえ '、すべてが"いいえ " – Bjc51192

答えて

2

あなたは^$(開始-の文字列の終わりの文字列が続く) が空の文字列にマッチする正規表現パターンを使用することができます文字列の例:

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

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

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

正規表現パターンN|NoNで始まるかNoで始まるものと一致することに注意してください。 NoNで始まるので、N|NoNに相当します。Noは不要です。同様に、Yes|Y|represented|Open|ClosedY|represented|Open|Closedに減らすことができます。ところで


、ブラケット([...][...])の二組が、これが連鎖-インデックスと呼ばれ、いくつかの状況で以来、パンダに割り当てを行う際に避けるべきである

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

であることに気づくsuch an assignment may fail to modify df

パンダでこれをコーディングする正しい方法はlocを使用することです:

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

魅力のように働いてくれてありがとう、ありがとう。あなたはなぜ、df [" Suited Filed(Y/N) "] [df [" Original Disigation "] str.match(" N | case = False)] = 'いいえ'は機能しませんか? – Bjc51192

+0

'N |いいえ|'は、 'N'または'いいえ 'と一致するように 'match'に指示します。常に一致するものはありません。 – unutbu

+0

ああ、私は参照してください。ありがとうunutbu。 – Bjc51192

関連する問題