有没有更好的方法来检查数据帧中的每个元素是否包含在给定字符串中?

Is there a better way to check for each element in a dataframe that it is contained in a given string?

提问人:ramech 提问时间:7/5/2023 更新时间:7/5/2023 访问量:30

问:

假设我们有一个数据帧,表示某些人的活动,如下所示:df

指数 玛丽 特里斯坦 路易丝 阿诺德 贾斯汀 斯泰西
0 工程师 软件工程师 摇滚歌手 说唱歌手 伐木 工人 生物医学工程师
1 吉他 手 航空航天工程师 作者 无花果战斗机
2 商人

我想检查一下每个活动是否是或可能是软件工程。使用 ,我们将得到:s = 'Software Engineer'

指数 玛丽 特里斯坦 路易丝 阿诺德 贾斯汀 斯泰西
0
1
2

这意味着我想测试所有单元格,因为它们是或不是 的子字符串。已经起作用的是以下内容,但它看起来很脏:dfs

s = 'Software Engineer'
df.apply(lambda col: col.apply(lambda x: str(x) in s))

困扰我的是双重应用,可能有更好的解决方案,对吧?

熊猫 应用 包含 伊辛

评论


答:

0赞 Debi Prasad 7/5/2023 #1

您可以执行的方法之一是使用 numpy 数组的属性,然后获得适当的解决方案

# Let's assume df is your dataframe which contains all the information
df=df.fillna('None')
# replace the null values as None
values=df.values
boolean_values=values=='Software Engineer'

现在,您的 boolean_values 数组将包含您想要的确切格式的数据,现在您可以按照所需的方式重新构建数据帧

cols=df.columns
df=pd.DataFrame(boolean_values,columns=cols)

这样你就有了想要的输出。

0赞 abdelgha4 7/5/2023 #2

要检查数据帧中的每个单元格是否是不需要 numpy 的子字符串,您可以使用 applymaps

df.applymap(lambda cell: bool(cell) and cell in s)

注意:用于排除空单元格和 NaN 单元格,并将它们标记为 False。bool(cell)

另外,如果你想要相反的方式,即。检查是否是每个单元格的子字符串,可以使用矢量化字符串函数进一步优化代码:s

df.apply(lambda column: column.str.contains(s))