繁体   English   中英

如何在Pandas DataFrame中优化搜索

[英]How can I Optimize a search in pandas dataframe

我需要在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

在使用pandas数据框(或numpy数组)时,应始终尝试使用向量化操作,而不是对单个数据框元素进行for循环。 向量化运算(几乎总是)比for循环快得多。

在您的情况下,您可以使用熊猫内置的矢量化操作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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM