如何在 pandas 系列中使用多个分隔符并分成多行

How to use multiple separators in a pandas Series and split into multiple rows

我有一个这样的数据框。

df = pd.DataFrame({
    "Name" : ["ABC LLC Ram corp", "IJK Inc"],
    "id" : [101, 102]
 })

    Name                id
0 ABC LLC Ram corp      101
1 IJK Inc               102

我正在尝试根据我的分隔符将 Name 系列分成多行。我可以拆分但也无法保留分隔符。

separators = ["inc","corp","llc"]

我的预期输出是,

Name       id
ABC LLC    101
RAM corp   101
IJK Inc    102

请帮忙,谢谢。

您可以使用 str.findall 查找列 Name 中所有匹配正则表达式模式的出现,然后将这些匹配出现分配给列 Nameexplode Name 上的数据框:

pat = fr"(?i)(.*?(?:{'|'.join(separators)}))"
df.assign(Name=df['Name'].str.findall(pat)).explode('Name')

正则表达式详细信息:

  • (?i):不区分大小写的标志
  • ( : 捕获组开始
  • .*? :匹配除行终止符之外的任何字符,次数为零次到无限次,次数越少越好 (lazy match)。
  • (?: : 非捕获组的开始
  • {'|'.join(separators)}f-string 表达式的计算结果为 inc|corp|llc
  • ) : 非捕获组结束
  • ) : 捕获组结束

        Name   id
0    ABC LLC  101
0   Ram corp  101
1    IJK Inc  102

有点冗长的方法,用逗号替换单词后的空格,然后拆分:

d = dict(zip([f'{i} ' for i in separators],[f'{i},' for i in separators]))
#{'inc ': 'inc,', 'corp ': 'corp,', 'llc ': 'llc,'}

out = (df.assign(Name=df['Name'].str.lower()
       .replace(d,regex=True).str.title().str.split(",")).explode("Name"))

print(out)

       Name   id
0   Abc Llc  101
0  Ram Corp  101
1   Ijk Inc  102