Pandas extractall合并

3

不确定是应该修复正则表达式模式还是通过Pandas进行更多处理。

这是一个模拟设置:

import re
import pandas as pd

regex = r"(?P<adv>This)|(?P<noun>test)"
texts = ["This is a test", "Random stuff with no match"]
series = pd.Series(texts)

我想查找所有匹配的组(<adv>, <noun> -- 通常有超过两个)。这些组被设计为互斥,因此我只想要一个包含捕获字符串/ NaN的结果行。

当前输出:多级索引行,仅适用于有匹配项的文本。

>>> print(series.str.extractall(regex))
          adv  noun
  match            
0 0      This   NaN
  1       NaN  test

期望输出:每个输入文本一行,每个组的匹配聚合。
          adv  noun
0        This  test
1         NaN   NaN

可以帮忙吗?要么修正正则表达式,要么使用pandas进行后处理。 谢谢!

1个回答

3

你可以尝试;

series.str.extractall(regex).groupby(level=0).first()

    adv  noun
0  This  test

非常有用。我意识到当有多行时,事情变得更加复杂,并更新了我的问题 - 如果您能帮助我解决这个问题,谢谢,否则我也可以提出另一个问题并接受这个答案。 - arnaud
@Arnaud 没问题,我没事。但请告诉我为什么你期望第二行..它的目的是什么,如果你有多行也不会受影响,例如检查 pd.Series([text,text]).str.extractall(regex).groupby(level=0).first() - anky
如果您使用 pd.Series([text, "不匹配的随机事物"]),那么就没有第二行了。因为第二个文本没有匹配到任何内容,但我仍然希望保留其行并填充 NaN 条目。希望您能理解我的意思。 - arnaud
1
@Arnaud明白了,在这种情况下,只需像series.str.extractall(regex).groupby(level=0).first().reindex(series.index)这样链接一个.reindex即可吗? - anky

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接