str.match忽略空值

时间:2017-08-01 19:10:15

标签: python pandas

当我尝试在空白值上使用str.mtach时,它只是忽略了空白。

在我使用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中需要添加的值。

1 个答案:

答案 0 :(得分:2)

您可以使用正则表达式模式var values = [500, 0, 4000, 1000]; values .sort((a, b) => a - b) .forEach(a => { var x = Math.log2((a || 250) / 500); console.log((x + 2) + '_' + a); });(字符串开头后跟字符串结尾) 匹配空字符串:

^$

或者,您可以使用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开头的所有内容。由于NoNo开头,因此模式N相当于N|No - N不是必需的。同样,No可以缩减为Yes|Y|represented|Open|Closed

顺便提一下,注意

中有两组括号(Y|represented|Open|Closed
[...][...]

这称为链式索引,在Pandas中进行分配时应该避免使用,因为在某些情况下such an assignment may fail to modify df

在Pandas中对此进行编码的正确方法是使用df["Suit Filed (Y/N)"][...] = 'No'

loc
相关问题