如何删除两个字符串之间的字符串,比如“stringx”和“stringy”,这两个字符串在datafram中可能出现多次

2024-06-02 09:57:18 发布

您现在位置:Python中文网/ 问答频道 /正文

df是非结构化的,没有列和行标题。每列都有字符串,其中有一组需要删除的模式,该模式如下所述:

作为字符串输入到非结构化df的一列:

我将被阅读===开始===我将被删除===停止===我必须被再次阅读===开始===再次删除我===停止===继续阅读

需要输出:

我要被阅读我要再被阅读继续阅读

在这里,每当字符串“===start===”出现时,我必须将其从“===stop==”中删除。df有数千个条目。使用regex最有效的方法是什么?你知道吗

下面的代码在一列上工作,但需要很长时间才能完成。你知道吗

有没有一个使用regex的解决方案是最有效/时间复杂度最低的?你知道吗

df = pd.read_excel("sample_excel.xlsx", header=None)
def removeString(df):
 inf = df[0][1]
 infcopy = ''
bol = False
start = '*start*'
end = '*stop*'
inf.replace('* start *',start) #in case black space between start
inf.replace('* stop *',end)    #in case black space between start
for i in range(len(inf)):
 if inf[i] == "*" and inf[i:i+len(start)] == start:
  bol = True
 if inf[i] == '*' and inf[i+1-len(end):i+1] == end:
  bol = False
continue
 if bol == False:
 infcopy += inf[i]
df[0][1] = infcopy

Tags: 字符串infalsedflenif模式start
1条回答
网友
1楼 · 发布于 2024-06-02 09:57:18

我想它可能看起来像这样。你知道吗

import pandas as pd
import re

def removeString(df):
    pattern = r'(?:start(.*?)stop)'
    df[ColToRemove] = df[ColToRemove].apply(lambda x: re.sub(pattern, "",x))

例如

df = pd.DataFrame({'Col1':['startjustsomethingherestop']})

输出:

                         Col1
0  startjustsomethingherestop

然后

pattern = r'(?:start(.*?)stop)'
df['Col1'] = df['Col1'].apply(lambda x: re.sub(pattern, "", x))

输出:

  Col1
0

这里定义的regex模式将在找到以“start”开头、以“stop”结尾的字符串的匹配项并将其作为输出时删除所有内容

相关问题 更多 >