按最后一个分隔符和大写值拆分列 - python

问题描述 投票:0回答:1

我正在尝试按最后一个

' - '
with 拆分一列,后跟所有大写字符串字母。 它不一定是最后一个孤立的分隔符。但它将是所有大写字符串之前的最后一个

我可以找到根据第一个/最后一个分隔符分隔的单独问题。但不能组合使用。

下面,我有一个 df ,其中

Value
包含各种组合。我想将 col 分成两个单独的列,其中最后一个
' - '
和大写字母之前的所有内容。

我的

Last
列正确,但
First
列不正确。

df = pd.DataFrame({
   'Value': ['Juan-Diva - HOLLS', 'Carlos - George - ESTE BAN - BOM', 'Javier Plain - Hotham Ham - ALPINE', 'Yul - KONJ KOL MON'],
   })

选项 1)

df[['First', 'l']] = df['Value'].str.split(' - ', n=1, expand=True)

df['Last'] = df['Value'].str.split('- ').str[-1]

选项2)

# Regular expression pattern
pattern = r'^(.*) - ([A-Z\s]+)$'

# Extract groups into two new columns
df[['First', 'Last']] = df['Value'].str.extract(pattern)

选项3)

df[["First", "Last"]] = df["Value"].str.rsplit(" - ", n=1, expand=True)

这些选项都不会返回预期的输出。

预期输出:

                       First            Last
0                  Juan-Diva           HOLLS
1            Carlos - George  ESTE BAN - BOM
2  Javier Plain - Hotham Ham          ALPINE
3                        Yul    KONJ KOL MON
python pandas split
1个回答
0
投票

我会在这里使用

str.extract

df[["First", "Last"]] = df["Value"].str.extract(r'(.*?)\s*-\s*([A-Z]+)(?:\s*-\s*[A-Z]+)*')
© www.soinside.com 2019 - 2024. All rights reserved.