【问题标题】:Regex expression to replace a string containing a substring with the substring only in a DataFrame正则表达式仅在 DataFrame 中用子字符串替换包含子字符串的字符串
【发布时间】:2019-10-13 05:45:24
【问题描述】:

我正在尝试将包含某个子字符串的 Python 数据框列中的所有字符串替换为仅子字符串本身。最好是“inplace=True”类型的结果。

我尝试了各种正则表达式,不幸的是,由于我是新手,我尝试过的一切都没有产生预期的结果。我在 Python 3.7.3 上。

我认为我需要在数据框中进行替换的代码是

df.replace(to_replace = 标识包含子字符串的字符串中的子字符串的正则表达式,值 = 'substring',正则表达式 = True)。所以下面是我正在尝试做的一个例子

#original dataframe
import pandas as pd

df = pd.DataFrame({'brand':['brand1 & brand2','brand1/brand3','brand4 brand3','brand1 and brand 6']})
df

    brand
0   brand1 & brand2
1   brand6
2   brand1/brand3
3   brand9
4   brand4 brand3
5   brand8
6   brand1 and brand6

#desired result

df

    brand
0   brand1
1   brand6
2   brand1
3   brand9
4   brand4 brand3
5   brand8
6   brand1

到目前为止,我的正则表达式没有任何变化。请注意,品牌名称实际上并不包含 1-9,以避免任何可能的混淆。我正在处理的实际 df 有超过 10k 行,但在包含 brand1 的列“brands”字符串中,包含 10k 中的大约 2k,我需要仅用“brand1”替换所有包含 brand1 的字符串。

【问题讨论】:

  • 你是否添加了inplace=True
  • 您使用pd.DataFrame({'brand':['brand1 & brand2','brand1/brand3','brand4 brand3','brand1 and brand 6']}) 输入的数据与您作为输入显示的数据不匹配。现在是否清楚您要替换的内容。
  • 它现在应该匹配。就我要替换的内容而言,该示例显示任何包含品牌 1 的行,我想仅用品牌 1 替换这些字符串。所以第0行最初是字符串'brand1&brand2',我想用'brand1'替换它。其他行以此类推。
  • 那么,第 4 行是怎么回事?为什么不直接变成brand4?
  • 我需要保留该行。基本上,字符串中某处没有brand1 的所有行都需要单独放置。只有带有 brand1 的行才会使用正则表达式进行处理。

标签: python regex dataframe replace


【解决方案1】:

用途:

df['brand'] = np.where(df['brand'].str.contains('brand1'), 'brand1',df['brand'])

输入

    brand
0   brand1 & brand2
1   brand6
2   brand1/brand3
3   brand9
4   brand4 brand3
5   brand1 and brand 6

输出

    brand
0   brand1
1   brand6
2   brand1
3   brand9
4   brand4 brand3
5   brand1

【讨论】:

  • 做到了。谢谢。当它允许我时,我会接受。我有点惊讶我不需要正则表达式......我必须阅读 np.where。谢谢。
  • 很高兴为您提供帮助。显示输入和预期输出并解释您要实现的目标总是更好。这有助于其他人提出实现它的各种方法,其中一些方法可能比我们想到的方法更有效:-)
  • 你能解释一下它是如何工作的吗?代码中的 brand1 有什么特别之处,因为输出会产生其他品牌 值?
  • brand1 没有什么特别之处。在np.where 中,您可以在条件为真和条件为假时执行某些操作。我所做的是告诉当字符串包含 brand1 时,将单元格的值设为brand1,否则将内容保留在列brand
  • 如果解决方案对您有帮助,请考虑支持/接受答案。
猜你喜欢
  • 2023-03-13
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 1970-01-01
  • 2014-03-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多