2017-08-01 118 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中需要添加的值。

+0

你爲什麼把「‘’」當你試圖匹配一個空字符串? –

+0

我試過df [「Suit Filed(Y/N)」] [df [「Original Litigation」]。str.match(「N | No |',case = False)] ='No',一切都被映射到」沒有「 – Bjc51192

回答

2

你可以使用正則表達式模式^$(開始-的字符串,然後結束串) 匹配空字符串:

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

,或者,你可以使用str.len測量長度琴絃:

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|No將匹配任何與N開頭或No開始。由於NoN開頭,因此N|No的模式相當於N - No不是必需的。同樣,Yes|Y|represented|Open|Closed可以減少到Y|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

工作就像一個魅力,謝謝。你會碰巧知道爲什麼l DF [」適合提交(是/否)「] [df [」原始訴訟「]。str.match(」N | No |', case = False)] ='不'不起作用?我不明白爲什麼它將所有內容映射到'否' – Bjc51192

+0

'N |否|'告訴匹配匹配'N'或'No'或...什麼也沒有。沒有什麼比賽。 – unutbu

+0

啊我明白了。謝謝unutbu。 – Bjc51192