所以我有一个Pandas 专栏,看起来像这样:

full_name = pd.Series([
    'Reservoir 1 Compartment 1', 
    'Reservoir 1 Common Inlet', 
    'Reservoir 2 Compartment 1',
    'Vyrnwy Line 2 Balancing Tank 1', 
    'Reservoir 1'
])

我想把它分成两列.预期输出应如下所示:

[['Reservoir 1', 'Compartment 1'],
 ['Reservoir 1', 'Common Inlet'],
 ['Reservoir 2', 'Compartment 1'],
 ['Vyrnwy Line 2', 'Balancing Tank 1'],
 ['Reservoir 1', None]]

我试过:

res_compartment_split = pd.concat([full_name.str.split(r'\s\s*?(?=[A-Z])', expand=True)])

但我得到了这个输出

[['Reservoir 1', 'Compartment 1', None, None],
 ['Reservoir 1', 'Common', 'Inlet', None],
 ['Reservoir 2', 'Compartment 1', None, None],
 ['Vyrnwy', 'Line 2', 'Balancing', 'Tank 1'],
 ['Reservoir 1', None, None, None]]

谢谢你的帮助.

推荐答案

请try 以下操作:

import pandas as pd

full_name = pd.Series([
    'Reservoir 1 Compartment 1', 
    'Reservoir 1 Common Inlet', 
    'Reservoir 2 Compartment 1',
    'Vyrnwy Line 2 Balancing Tank 1', 
    'Reservoir 1'
])

res = full_name.str.split('(?<=\d)\s+(?=[A-Z])', expand=True)

输出:

>>> res
               0                 1
0    Reservoir 1     Compartment 1
1    Reservoir 1      Common Inlet
2    Reservoir 2     Compartment 1
3  Vyrnwy Line 2  Balancing Tank 1
4    Reservoir 1              None

正则表达式模式的解释:

  • (?<=\d)-正向查找:确保在分隔符之前有一个数字,而不使用它
  • \s+-分隔符:匹配一个或多个空格
  • (?=[A-Z])-积极前瞻:确保后面有一个字母(a到Z),而不消耗它

使用regex101.com查看它的实际操作.

此外,您可以在这里看到您的模式不起作用的原因:https://regex101.com/r/nSmEEs/1.

Python相关问答推荐

计算每月过go x年的平均值

如何判断. text文件中的某个字符,然后读取该行

如何才能将每个组比上一组增加N %?

Pandas滚动分钟,来自其他列的相应值

收件箱转换错误- polars.exceptions. ComputeHelp- pandera(0.19.0b3)带有polars

如何在PIL、Python中对图像应用彩色面膜?

无法使用python.h文件; Python嵌入错误

Pydantic:如何将对象列表表示为dict(将列表序列化为dict)

如何在BeautifulSoup中链接Find()方法并处理无?

试图找到Python方法来部分填充numpy数组

通过Selenium从页面获取所有H2元素

cv2.matchTemplate函数匹配失败

如何使用Pandas DataFrame按日期和项目汇总计数作为列标题

Python导入某些库时非法指令(核心转储)(beautifulsoup4."" yfinance)

Python Pandas获取层次路径直到顶层管理

在matplotlib中删除子图之间的间隙_mosaic

使用Python从rotowire中抓取MLB每日阵容

LocaleError:模块keras._' tf_keras. keras没有属性__internal_'''

将一个双框爆炸到另一个双框的范围内

Beautifulsoup:遍历一个列表,从a到z,并解析数据,以便将其存储在pdf中.