当前位置: 首页 > 知识库问答 >
问题:

Pandas str.contains-搜索字符串中的多个值,并在新列中打印这些值[重复]

施招
2023-03-14

我在R中找到了一个类似的解决方案,它使用stringr库:在字符串中搜索一个值,如果该值存在,则将其单独打印到一个新列中

下面的代码似乎可以工作,但我还希望输出我正在寻找的三个值,而这个解决方案将只输出一个值:

#Inserting new column
df.insert(5, "New_Column", np.nan)

#Searching old column
df['New_Column'] = np.where(df['Column_with_text'].str.contains('value1|value2|value3', case=False, na=False), 'value', 'NaN')

----编辑----

import pandas as pd
import numpy as np

text = [('I want to buy some apples.', 0),
         ('Oranges are good for the health.', 0),
         ('John is eating some grapes.', 0),
         ('This line does not contain any fruit names.', 0),
         ('I bought 2 blueberries yesterday.', 0)]
labels = ['Text','Random Column']

df = pd.DataFrame.from_records(text, columns=labels)

df.insert(2, "MatchedValues", np.nan)

foods =['apples', 'oranges', 'grapes', 'blueberries']

pattern = '|'.join(foods)

df['MatchedValues'] = df['Text'].str.contains(pattern, case=False)

print(df)

结果

                                          Text  Random Column  MatchedValues
0                   I want to buy some apples.              0           True
1             Oranges are good for the health.              0           True
2                  John is eating some grapes.              0           True
3  This line does not contain any fruit names.              0          False
4            I bought 2 blueberries yesterday.              0           True

通缉结果

                                          Text  Random Column  MatchedValues
0                   I want to buy some apples.              0           apples
1             Oranges are good for the health.              0           oranges
2                  John is eating some grapes.              0           grapes
3  This line does not contain any fruit names.              0          NaN
4            I bought 2 blueberries yesterday.              0           blueberries

共有1个答案

劳灵均
2023-03-14

您需要设置regex标志(将搜索解释为正则表达式):

whatIwant = df['Column_with_text'].str.contains('value1|value2|value3',
                                                 case=False, regex=True)

df['New_Column'] = np.where(whatIwant, df['Column_with_text'])

----编辑----

根据更新后的问题声明,以下是更新后的答案:

df['MatchedValues'] = df['Text'].str.lower().str.extract( '('+pattern+')', expand=False)        
 类似资料:
  • 问题内容: 我得到了一个带有2列值的.txt文件。它们是2D坐标,因此第一列代表x值,第二列代表z值。不幸的是,有些行具有相同的x值但具有不同的z值。我想计算z值的平均值,以便将单个z与单个x关联。我所拥有的一个样本是: 如您所见,x值435.212与4个不同的z值相关联。我想拥有的是: 其中108.8985是(108.894 + 108.897 + 108.9 + 108.903)/ 4的结果。

  • 如果我有一个字符串“sssaaadddccc”,我如何只打印“sadc”。可以使用SubString吗?还是必须使用charAt()?

  • 我正在循环遍历数据文件中的每一行(包含用空格分隔的“字段”的行),并希望将一个字段的子字符串与另一个静态值进行比较。如果比较为真,我想打印一个字符串“X”,否则为“Y”。只是想知道如何使用Python完成它。不胜感激。谢谢。 代码:- 输入:- 输出:- 备注:-我对这段代码非常感兴趣。 要将上述子字符串与http://www.google.com如果匹配,则打印正确,否则打印不正确。

  • 背景我有一个小索引与一些字符串字段(例如名称,街道,城市,电子邮件)。 和类似于 Lorem ipsum dolor sit amet,consectetuer adipiscing Elit。埃尼·康茂多·利古拉·埃盖特·多洛。埃尼安·马萨。同时也是一个社会成员,即natoque penatibus et magnis dis matraft montes,nascetur loomus mus

  • 寻求帮助,从一个数据帧中搜索多个特定单词,在另一个数据帧的列(正文)中搜索,然后将这些值提取到新的列中。 进一步解释: < li >首先,我有一个数据框架,其中包含14个国家的大量文本摘要。 < li >其次,我有第二个数据框架,其中包含所有行政级别(lvl_2)名称,如省、村等。 < li >我想从大型摘要中提取所有提及adm2省/村名称的内容,并为每个单词创建一个新列,旋转更长时间。 这里有一

  • 我的问题 当我搜索时,它会按要求返回,但当我搜索时,它会返回,为什么会出现这种情况,以及如何修复它?