Python 加快文本处理步骤

Python 加快文本处理步骤,python,regex,pandas,Python,Regex,Pandas,我创建了一个函数,该函数对长度为1045459的数据帧进行一些文本处理。编译似乎花费了比正常时间更长的时间 这就是我所做的: def clean_descriptions(text_list): # First get everything into lowercase text_list = str(text_list) for x in text_list: x = x.lower() # Remove all instan

我创建了一个函数,该函数对长度为
1045459
的数据帧进行一些文本处理。编译似乎花费了比正常时间更长的时间

这就是我所做的:

def clean_descriptions(text_list):
    
    # First get everything into lowercase
    text_list = str(text_list)
    for x in text_list:
        x = x.lower()
    
    # Remove all instances of 3 characters followed by a number
    for substr in re.findall(r'\W([A-Z][A-Z][A-Z]\d)\W', text_list):
        text_list = text_list.replace(substr, '')
    text_list = text_list.replace('[]','') 
        
    # Remove NA
    text_list = text_list.replace('NA','')
        
    return text_list
这是我使用函数的方式:

df['short_description'] = clean_descriptions(df['short_description'].tolist())
有没有更有效的方法来做后者

以下是简短描述的示例:

PRG2 - stelucie needs help with Radio
[VLR44] vlrd-fc-edg-fw-01-00-01:BGP Status - WARNING [DEEP-DIVE]
[LGB3] lgb3-ar-acc-sw172129.amazon.com:PSU Check
[BFI4] Walk Up Ticket - Other
[FC-OOB]-DMO3 is down [DEEP-DIVE]

尝试替换代码的这一部分:

for substr in re.findall(r'\W([A-Z][A-Z][A-Z]\d)\W', text_list):
        text_list = text_list.replace(substr, '')
创建一个包含所有可能的子字符串的集合(而不是列表),以便只创建一次,而不是每次调用函数时(数据帧的1045459次)

还可以通过以下方式简单地替换to_lower功能(顺便说一句,这是不正确的):

text_list=text_list.lower()
最后,将所有替换项添加到同一命令:

text_list = text_list.replace('[]','').replace('NA','')

尝试替换代码的这一部分:

for substr in re.findall(r'\W([A-Z][A-Z][A-Z]\d)\W', text_list):
        text_list = text_list.replace(substr, '')
创建一个包含所有可能的子字符串的集合(而不是列表),以便只创建一次,而不是每次调用函数时(数据帧的1045459次)

还可以通过以下方式简单地替换to_lower功能(顺便说一句,这是不正确的):

text_list=text_list.lower()
最后,将所有替换项添加到同一命令:

text_list = text_list.replace('[]','').replace('NA','')

如果你离开熊猫去做这件事,你会让自己表现不佳

使用pandas own for inplace和regex语法:

输出:

                      short
0  Some text AD12 more text
1  Some text AD1z more text
2  Some text ADG2 more text
3  Some text ADGz more text
4  Some text AE12 more text
5  Some text AE1z more text
6  Some text AEG2 more text
7  Some text AEGz more text

                      short
0  Some text AD12 more text
1  Some text AD1z more text
2        Some textmore text
3  Some text ADGz more text
4  Some text AE12 more text
5  Some text AE1z more text
6        Some textmore text
7  Some text AEGz more text

如果你离开熊猫去做这件事,你会让自己表现不佳

使用pandas own for inplace和regex语法:

输出:

                      short
0  Some text AD12 more text
1  Some text AD1z more text
2  Some text ADG2 more text
3  Some text ADGz more text
4  Some text AE12 more text
5  Some text AE1z more text
6  Some text AEG2 more text
7  Some text AEGz more text

                      short
0  Some text AD12 more text
1  Some text AD1z more text
2        Some textmore text
3  Some text ADGz more text
4  Some text AE12 more text
5  Some text AE1z more text
6        Some textmore text
7  Some text AEGz more text


熊猫?什么是文本列表?列表数据帧?系列为什么不使用pandas内置正则表达式和pandas函数来操作df`?如果可以使用
re.sub
同时执行这两项操作,为什么要调用
findall
然后调用
replace
?@PatrickArtner我编辑了我的问题,但我使用的是pandas数据帧,我想我有一个更有效的方法来解决你的问题,但是你有没有一些样本输入数据和我想要的输出,我可以测试它?熊猫?什么是文本列表?列表数据帧?系列为什么不使用pandas内置正则表达式和pandas函数来操作df`?如果可以使用
re.sub
同时执行这两项操作,为什么要调用
findall
然后调用
replace
?@PatrickArtner我编辑了我的问题,但我使用的是pandas数据帧,但我可能正在做一些事情,导致它速度非常慢。我想我有一个更有效的解决方案来解决您的问题,但是您是否有一些示例输入数据,以及我可以测试它的期望输出?如果我创建一个集合,我想它将只包含pandas dataframe列中的唯一字符串。从那里我将如何进行适当的替换?也许是一个映射?如果我创建一个集合,我假设它只包含pandas dataframe列中的唯一字符串。从那里我将如何进行适当的替换?也许是一个映射?使用您的函数,我仍然可以得到BHX4的实例(3个字符后接一个数字),这些实例应该被删除。如果可行,让我编辑我的问题,以包括一个更大的示例。@SnorLaxxx初学者可以尝试使用
r”(?I)(^ | \W)([a-Z][a-Z][a-Z]\d)\W“
-
(?I)
表示大小写不敏感和
(^\W)
行开头可选或\W应有帮助。您可以将更多数据粘贴到正则表达式模式中,并对其进行修改,以获得合适的结果。谢谢您的帮助,最后一个问题。如果我想删除[]或()中包含的字符串,你知道我会怎么做吗?@snorlaxxx-类似于
r'(?I)(\[[a-z]{3}\d\])”
-prefix\使[and]literal[]-->是你的朋友使用你的函数,我仍然会得到BHX4的实例(3个字符后跟一个数字)让我编辑我的问题,以包括一个更大的例子,如果这样做有效的话。@snorlaxxx初学者可以尝试使用
r”(?i)(^ |\W)([a-Z][a-Z][a-Z]\d)\W“
-
(?i)
(^ |\W)作为行首选项,或者\W应该有帮助。您可以将更多数据粘贴到正则表达式模式中,并对其进行修改,以获得合适的结果。谢谢您的帮助,最后一个问题。如果我想删除[]或()中包含的字符串,您知道我会怎么做吗?@snorlaxxx-类似于
r'(?I)(\[[a-z]{3}\d\])”
-前缀\使[and]literal[]-->成为您的朋友