我正在尝试按最后一个
' - '
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
我会在这里使用
str.extract
:
df[["First", "Last"]] = df["Value"].str.extract(r'(.*?)\s*-\s*([A-Z]+)(?:\s*-\s*[A-Z]+)*')