根据字符串(正则表达式)将一行拆分为更多行
Split a row into more rows based on a string (regex)
我有这个 df,我想拆分它:
cities3 = {'Metropolitan': ['New York', 'Los Angeles', 'San Francisco'],
'NHL': ['RangersIslandersDevils', 'KingsDucks', 'Sharks']}
cities4 = pd.DataFrame(cities3)
获得像这样的新 df:(请点击图片)
我可以使用什么代码?
您可以使用以下正则表达式,根据一个大写字母和一个小写字母来拆分您的列:
(?<=[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
我有这个 df,我想拆分它:
cities3 = {'Metropolitan': ['New York', 'Los Angeles', 'San Francisco'],
'NHL': ['RangersIslandersDevils', 'KingsDucks', 'Sharks']}
cities4 = pd.DataFrame(cities3)
获得像这样的新 df:(请点击图片)
我可以使用什么代码?
您可以使用以下正则表达式,根据一个大写字母和一个小写字母来拆分您的列:
(?<=[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