首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于空间规则匹配器选择Pandas DataFrame的行

基于空间规则匹配器选择Pandas DataFrame的行
EN

Stack Overflow用户
提问于 2020-07-20 10:21:29
回答 2查看 504关注 0票数 2

我需要根据基于spacy规则的配对结果分割一只熊猫DataFrame。以下是我尝试过的。

代码语言:javascript
复制
import pandas as pd
import numpy as np
import spacy
from spacy.matcher import Matcher

df = pd.DataFrame([['Eight people believed injured in serious SH1 crash involving truck and three cars at Hunterville',
 'Fire and emergency responding to incident at Mataura, Southland ouvea premix site',
 'Civil Defence Minister Peeni Henare heartbroken over Northland flooding',
 'Far North flooding: New photos reveal damage to roads']]).T
df.columns = ['col1']

nlp = spacy.load("en_core_web_sm")

flood_pattern = [{'LOWER': 'flooding'}]

matcher = Matcher(nlp.vocab, validate=True)
matcher.add("FLOOD_DIS", None, flood_pattern)
titles = (_ for _ in df['col1'])
g = (d for d in nlp.pipe(titles) if matcher(d))
x = list(g)

df2 = df[df['col1'].isin(x)]
df2

这会产生一个空的DataFrame。但是,它应该从df中提取以下两行。

  1. 民防部长皮尼·赫纳雷因北部洪水
  2. 远北洪水而心碎:新照片显示道路遭到破坏
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-07-20 22:41:43

你可以做下面的事。

代码语言:javascript
复制
titles = (_ for _ in df['col1'])
g = (d for d in nlp.pipe(titles) if matcher(d))


A = []
for i in range(len(df)):
    doc = nlp(next(titles))
    if len(matcher(doc)) == 1:
        A.append(str(doc))
df2 = df[df['col1'].isin(A)]
票数 2
EN

Stack Overflow用户

发布于 2020-07-25 10:31:06

试试这个:

代码语言:javascript
复制
matcher.add("FLOOD_DIS", None, flood_pattern)
matches = [True if matcher(doc) else False for doc in nlp.pipe(df['col1'])]
df2 = df[matches][['col1']]
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62993303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档