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[]-->成为您的朋友