我试图通过最后一个' - '
AND后跟所有字符串字母来拆分列。
它可能不一定是孤立的最后一个字符串。但它将是所有字符串之前的最后一个字符串。
我可以根据第一个/最后一个问题找到单独的问题,但不能组合。
下面,我有一个包含各种组合的Value
的df。我想把col分成两个单独的列,其中,最后一个' - '
和x1字母之前的所有内容。
我得到了正确的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
型
正则表达式:
df[["First", "Last"]] = df["Value"].str.extract(r'(.*?)\s*-\s*([A-Z]+(?:\s*-?\s*[A-Z]+)*)')
Value First Last
0 Juan-Diva - HOLLS Juan D
1 Carlos - George - ESTE BAN - BOM Carlos G
2 Javier Plain - Hotham Ham - ALPINE Javier Plain H
3 Yul - KONJ KOL MON Yul KONJ KOL MON
的字符串
1条答案
按热度按时间svujldwt1#
这里使用
str.extract
:字符串
Demo
上面的例子使用
str.extract
的2/multicolumn版本。它捕获第一个捕获组中的第一个名字。它匹配直到找到最近的连字符,后跟所有大写字母。然后它匹配第二个捕获组中的最后一个名字。