根据字符串(正则表达式)将一行拆分为更多行

Posted

技术标签:

【中文标题】根据字符串(正则表达式)将一行拆分为更多行【英文标题】:Split a row into more rows based on a string (regex) 【发布时间】:2021-07-11 01:04:13 【问题描述】:

我有这个 df,我想拆分它:

cities3 = 'Metropolitan': ['New York', 'Los Angeles', 'San Francisco'],
           'NHL': ['RangersIslandersDevils', 'KingsDucks', 'Sharks']
cities4 = pd.DataFrame(cities3)

要获得像这样的新 df:(请点击图片)

我可以使用什么代码?

【问题讨论】:

【参考方案1】:

您可以使用此正则表达式根据一个大写字母和一个小写字母来拆分您的列:

(?<=[a-z])(?=[A-Z])

然后您可以使用this answer 中描述的技术将列替换为其分解版本:

cities4 = cities4.assign(NHL=cities4['NHL'].str.split(r'(?<=[a-z])(?=[A-Z])')).explode('NHL')

输出:

    Metropolitan        NHL
0       New York    Rangers
0       New York  Islanders
0       New York     Devils
1    Los Angeles      Kings
1    Los Angeles      Ducks
2  San Francisco     Sharks

如果你想重置索引(到 0..5),你可以这样做(在上述命令之后或作为它的一部分)

cities4.reset_index().reindex(cities4.columns, axis=1)

输出:

    Metropolitan        NHL
0       New York    Rangers
1       New York  Islanders
2       New York     Devils
3    Los Angeles      Kings
4    Los Angeles      Ducks
5  San Francisco     Sharks

【讨论】:

以上是关于根据字符串(正则表达式)将一行拆分为更多行的主要内容,如果未能解决你的问题,请参考以下文章

C ++拆分字符串基于/使用(增强)正则表达式来查找令牌

使用正则表达式将字符串拆分为句子

C# 正则表达式拆分为 Java 模式拆分

正则表达式将字符串拆分为 char 但具有最大大小

正则表达式 .net 拆分

使用正则表达式将字符串拆分为多个变量 SAS