【问题标题】:Pandas> Remove strings ending with backslash and remain strings after backslash?Pandas>删除以反斜杠结尾的字符串并在反斜杠后保留字符串?
【发布时间】:2020-08-25 07:16:26
【问题描述】:

我怎样才能摆脱最后一个反斜杠(包括反斜杠)之前的每个字母,我只想保留它的其余部分。但是我不知道怎么写代码,,,

*原始数据框(来自 xlsx 文件) BS1\CB\A2C40001444 42.3 BS1\CB\A2C40006231 32.1 BS1\A2C01345300 44.45 BS1\A2C01345300 44.45 BS1\CB\A2C01345300 44.4

*必需的数据框 A2C40001444 42.3 A2C40006231 32.1 A2C01345300 44.45 A2C01345300 44.45 A2C01345300 44.4

【问题讨论】:

  • 您是否尝试使用正则表达式删除 `BS1\CB` 部分?

标签: regex pandas dataframe window


【解决方案1】:

一个 reg expr 提取为你做这件事

  1. 获取最后一个反斜杠之前的所有文本
  2. 最后一个反斜杠之后的所有内容都进入匹配组
df = pd.read_csv(io.StringIO("""text val
BS1\CB\A2C40001444 42.3 
BS1\CB\A2C40006231 32.1 
BS1\A2C01345300 44.45 
BS1\A2C01345300 44.45 
BS1\CB\A2C01345300 44.4"""), sep="\s+")

df["text"] = df["text"].str.extract("^[\w\\\]*\\\\(.*)")

print(df.to_string(index=False))

输出

        text    val
 A2C40001444  42.30
 A2C40006231  32.10
 A2C01345300  44.45
 A2C01345300  44.45
 A2C01345300  44.40

【讨论】:

  • 哇,这是我的第一个问题,而且效果很好。我真的很感激!
  • 谢谢,但你能解释一下它是如何工作的吗?我试图用谷歌搜索找到它的含义但失败了。使用正则表达式分析器,我无法找到它的真正含义。它完全有效,但我无法理解。 ^[\w\\]*\\\(.*) --> ^: 以下一个开头,[]: 字符。 set, : all, \\\\ : 从这里我无法理解和 (.): 每个可能的字符。设置..
  • reg 表达式有点像黑暗艺术......^[\w\\\]* 这部分匹配所有字母数字字符和反斜杠。 \\\\(.*) 这部分 a) 匹配最后一个反斜杠,然后圆括号表示捕获后面的所有内容。因此,圆括号中的部分是extract() 捕获的部分
  • 谢谢您.. 另外 \\ 表示我所知道的只是反闪 .. \\\\ 是什么意思? \\\\ 是否意味着“最后一个反斜杠”?
  • 那是正则表达式地狱 ;-)。反斜杠本身是有意义的,所以它必须被转义。在封闭的方括号内,它被三倍转义,它自己被四倍转义
猜你喜欢
  • 1970-01-01
  • 2014-09-12
  • 1970-01-01
  • 1970-01-01
  • 2015-03-28
  • 1970-01-01
相关资源
最近更新 更多