提问人:Muzzy 提问时间:10/14/2023 更新时间:10/18/2023 访问量:44
如何根据数组中的部分匹配从数据帧中删除行
How to remove rows from a dataframe based on partial match in an array
问:
我有一个包含客户信息的数据帧,包括名字和姓氏(单独的列)。我有一个名称数组,如果名称中存在部分匹配,我想删除行。
例如,姓氏是 smith-west,我在 names 数组中有 smith,因此应该删除该行。这可能吗?
df = df[~df['First Name'].isin(names)]
是我目前拥有的,但 isin 函数只做完全匹配
答:
0赞
LioWal
10/15/2023
#1
这里有一个命题:您可以创建一个过滤器来一次排除一个名称。例如,如果要排除名称中包含“Smith”的任何个人,则筛选器可以是 。如果列表中有多个名称,则可以使用 (logical and) 将它们组合在一起。下面是一个非常短的代码,就是这样做的:~df["Name"].str.contains("Smith")
&
import pandas as pd
df = pd.DataFrame({"First":["Bob","John","Peter"], "Name":["Smith-West","Adams","Washington"]})
name = ["Smith", "Santiago"]
filter = True
for n in name:
filter = filter & (~df.Name.str.contains(n))
df[filter]
评论
0赞
Muzzy
10/17/2023
就我而言,df 有一个名字和姓氏列。在这种情况下,它将如何工作。我必须重复两次代码吗
0赞
LioWal
10/18/2023
#2
要回答有关如何使用类似方法进行过滤但对两列进行过滤的附加问题:
import pandas as pd
df = pd.DataFrame({"First":["Bob","John","Peter"], "Name":["Smith-West","Adams","Washington"]})
name = ["Smith", "Santiago"]
first = ["Joe", "Peter"]
filter_name = True
for n in name:
filter_name = filter_name & (~df.Name.str.contains(n))
filter_first = True
for f in first:
filter_first = filter_first & (~df.First.str.contains(f))
df[filter_name & filter_first]
简而言之,我们在 上创建第一个过滤器,在 上创建第二个过滤器。然后我们组合然后使用 .name
first
filter_name & filter_first
评论