当前位置: 首页 > 面试题库 >

可伸缩的解决方案,其中包含pandas中的字符串列表

弓方伟
2023-03-14
问题内容

我正在解析df1包含字符串对象行的pandas数据框。我有一个关键字参考列表,需要df1从参考列表中删除包含任何单词的每一行。

目前,我这样做是这样的:

reference_list: ["words", "to", "remove"]
df1 = df1[~df1[0].str.contains(r"words")]
df1 = df1[~df1[0].str.contains(r"to")]
df1 = df1[~df1[0].str.contains(r"remove")]

不能扩展到数千个单词。 但是,当我这样做时:

df1 = df1[~df1[0].str.contains(reference_word for reference_word in reference_list)]

我产生错误, 第一个参数必须是字符串或编译模式

按照[此解决方案,我尝试了:

reference_list: "words|to|remove" 
df1 = df1[~df1[0].str.contains(reference_list)]

这不会引发异常,但不会解析所有单词。

如何有效地使用带有单词列表的str.contains?


问题答案:

对于可扩展的解决方案,请执行以下操作-

  1. 通过正则表达式或管道连接单词的内容 |
  2. 传递给 str.contains
  3. 使用结果进行过滤 df1

索引0次列,不使用df1[0](因为这可能被认为不明确)。最好使用lociloc(请参见下文)。

words = ["words", "to", "remove"]
mask = df1.iloc[:, 0].str.contains(r'\b(?:{})\b'.format('|'.join(words)))
df1 = df1[~mask]

注意:如果words是系列,这也将起作用。

另外,如果您的第0列仅是单词(而不是句子)的列,则可以使用df.isin,这应该更快-

df1 = df1[~df1.iloc[:, 0].isin(words)]


 类似资料:
  • 问题内容: 我正在使用SQLAlchemy和SQLite3构建查询,其中我想选择其中String列包含特定子字符串的行。做到这一点的最佳方法是什么? 问题答案: 筛选。还有一个不区分大小写的搜索。 对于更高级的界面,您可以允许使用已知的“ dir”通配符。 笔记: 和是(如果数据库是由另一个应用程序创建的,则SQLSoup很有用) 对于SQLAlchemy Core是。当您需要原始SQL的所有功能

  • 问题内容: 我有一个看起来像这样的Pandas DataFrame: 而且我想提取仅包含那些行的DataFrame,其中包含的任何行。因此结果应如下所示: 最简单的方法是什么? 供测试用: 问题答案: IIUC重新创建您的df,然后使用with应该比

  • 问题内容: 有没有这将是一个组合的等同的任何功能和? 例如,假设我有系列 ,并且我想找到s包含的任何一个的所有地方,那么我想得到除“宠物”以外的所有东西。 我有一个解决方案,但这很不雅致: 有一个更好的方法吗? 问题答案: 一种选择是仅使用正则表达式|字符尝试匹配系列中单词中的每个子字符串s(仍使用)。 你可以通过将单词与结合在一起来构造正则表达式|: 就像在下面的注释中指出的那样,请注意你的子字

  • 我试图在Flatter Firebase中执行一个“where”查询,以按名称进行过滤(如果对象名为“Una casa roja”,用户写“casa”,则必须返回该对象)。我不知道我能问谁。我只有这个,但不是我想要的: 谢谢

  • Byte[]utf8=str1.getBytes(“Windows-1254”);test3=新字符串(“windows-1254”); 输出为I:3/Ortakl:1/2:°:1/2 但上述代码在控制台程序中工作良好,即main method main method打印类似 isortakli的输出 任何建议都必须是可行的

  • 问题内容: 我有一个带有以下列名称的pandas数据框: Result1,Test1,Result2,Test2,Result3,Test3等… 我要删除名称包含单词“ Test”的所有列。这样的列数不是静态的,而是取决于先前的功能。 我怎样才能做到这一点? 问题答案: