2017-08-01 113 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