我需要在Dataframe中搜索单词'mas',带有frase的列为Corpo,并且此列中的文本在列表中进行拆分,例如:我喜欢小鸟---> split [I,like,birds ]。因此,我需要在葡萄牙语中搜索“ mas”并仅捕获“ mas”之后的单词。该代码需要很长时间才能执行此功能。
df.Corpo.update(df.Corpo.str.split()) #tokeniza frase
df.Corpo = df.Corpo.fillna('')
for i in df.index:
for j in range(len(df.Corpo[i])):
lista_aux = []
if df.Corpo[i][j] == 'mas' or df.Corpo[i][j] == 'porem' or df.Corpo[i][j] == 'contudo' or df.Corpo[i][j] == 'todavia':
lista_aux = df.Corpo[i]
df.Corpo[i] = lista_aux[j+1:]
break
if df.Corpo[i][j] == 'question':
df.Corpo[i] = ['question']
break
答案 0 :(得分:0)
在处理pandas
个数据帧(或numpy
数组)时,应始终尝试使用向量化操作,而不是对单个数据帧元素进行for循环。 Vectorized operations are (nearly always) significantly faster than for-loops.
在您的情况下,您可以使用pandas内置的矢量化操作str.extract
,该操作允许提取与正则表达式搜索模式匹配的字符串部分。正则表达式搜索模式mas (.+)
应该捕获在'mas'之后的字符串部分。
import pandas as pd
# Example dataframe with phrases
df = pd.DataFrame({'Corpo': ['I like birds', 'I mas like birds', 'I like mas birds']})
# Use regex search to extract phrase sections following 'mas'
df2 = df.Corpo.str.extract(r'mas (.+)')
# Fill gaps with full original phrase
df2 = df2.fillna(df.Corpo)
将给出结果:
In [1]: df2
Out[1]:
0
0 I like birds
1 like birds
2 birds