python - 如何在熊猫系列中使用多个分隔符并拆分为多行
问题描述
我有一个这样的数据框。
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
我正在尝试根据我的分隔符将名称系列拆分为多行。我可以拆分但也无法保留分隔符。
separators = ["inc","corp","llc"]
我的预期输出是,
Name id
ABC LLC 101
RAM corp 101
IJK Inc 102
请帮忙,谢谢。
解决方案
您可以使用str.findall
在 column 中查找所有匹配的正则表达式模式的出现Name
,然后将这些匹配的出现分配给 columnName
和explode
dataframe 上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
推荐阅读
- c# - Unity如何从列表中删除GameObject?似乎不适合我
- go - ide 在 $GOPATH 中找不到包 shim 和 proto 包
- r - 新建包A时如何修改包B的几个方法?
- ios - 如何在颤振中降级软件包?
- node.js - 为子域设置 cookie
- javascript - 需要在页面加载前显示 div
- ios - 模拟器人脸ID快捷方式
- python - 烧瓶错误:db:“scoped_session”的 scoped_session 实例没有“commit”memberpylint(no-member)
- java - 当给定类型是数组时如何使用给定类型实例化泛型类
- javascript - ES6,任何 Babel-plugins (Version6) 来解构新的 Set?