结构匹配忽略空白值

2024-05-15 02:44:12 发布

您现在位置:Python中文网/ 问答频道 /正文

当我试图使用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语句来得到我想要的东西。但问题是,我仍然必须返回,并查看映射到“No”的所有值。如果我能让上面的工作,我就只需要过滤空白,看看需要在结构匹配. 你知道吗


Tags: nofalsedfmatch公司语句空白yes
1条回答
网友
1楼 · 发布于 2024-05-15 02:44:12

您可以使用regex模式^$(字符串开头后跟字符串结尾) 要匹配空字符串:

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

请注意,regex模式N|No将匹配以N开头或以No开头的任何内容。因为NoN开头,所以模式N|No等同于NNo是不必要的。类似地,Yes|Y|represented|Open|Closed可以减少到Y|represented|Open|Closed。你知道吗


顺便说一句,请注意在中有两组括号([...][...]

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

这称为链式索引,在Pandas中进行赋值时应该避免,因为在某些情况下such an assignment may fail to modify ^{}。你知道吗

在Pandas中编写代码的正确方法是使用loc

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

相关问题 更多 >

    热门问题