【问题标题】:Searching for a string that doesn't include certain characters搜索不包含某些字符的字符串
【发布时间】:2020-05-01 04:59:14
【问题描述】:

在“a”列中,我的值是用逗号分隔的数字(范围从 1 到 35)。例如'1,6,7,3,5,15,6,25,30' 和 '5,6,7,33' '1,6,29,15'

在新列“b”中,只要 A 列中的值为 5 或其变体 ,5(逗号 5)或 5,(逗号 5),我希望该值说“是”。但是我不希望包含 15 或 25 之类的值。有没有办法将 5 的所有组合都用逗号而不是其他任何东西包含在内?

df.loc[df['a'].str.contains(',5'), 'b'] = 'yes'
df.loc[df['a'].str.contains('5,'), 'b'] = 'yes'

【问题讨论】:

  • ^5$|^5,|,5,|,5$ 似乎涵盖了所有基础。 regex101.com/r/NsqaP6/1
  • 如果值同时包含515 怎么办?喜欢5,2,15,5
  • @jofrev 目标是布尔检查是否存在,而不是提取所有出现。
  • @jofrev 不用担心。与本网站上发布的任何正则表达式问题一样,发布者很少意识到他们选择的单词如何影响所提供的解决方案。大多数问题都有很多不相容的浮夸,这使得问题在第一次尝试时无法回答。无论如何,您的正则表达式也适用于手头的目标。
  • \b5\b 怎么样?

标签: python regex string pandas replace


【解决方案1】:

我建议将逗号分隔的字符串转换为数组(参见此处了解如何操作:How to convert a string to a list in Python?)。

然后您可以使用in检查数组中是否存在搜索值(例如'5'),例如:

如果 arrayOfNumbers 中的 searchValue { 返回真 }

(或者您可以尝试使用三元运算符,但这是在 Python 中完成的)

【讨论】:

  • 听起来很慢
【解决方案2】:

我建议如下:

# your dataframe
df = pandas.DataFrame({'A': ['1,2,34,5,6', '32,2,4,67,5', '4,3,2,1,']}) 
df['B'] = df['A'].apply(lambda x : True if '5' in x.split(',') else False)

这将在您的数据框中添加一列B,如果存在 5,则包含 True,否则为 False。

           A    B
0   1,2,34,5,6  True
1   32,2,4,67,5 True
2   4,3,2,1,    False

【讨论】:

  • 我认为这将包括我想避免的 15 和 25
  • 如果您尝试True if '5' in ['15', '25'] else False,您会发现上述解决方案是正确的。 split 可以将字符串转换为字符串列表。
猜你喜欢
  • 1970-01-01
  • 2021-06-12
  • 1970-01-01
  • 2011-05-25
  • 2019-05-17
  • 2013-06-26
  • 2013-11-10
  • 2016-08-09
  • 2013-06-24
相关资源
最近更新 更多