我正在尝试根据列中的字符映射一个新值。这些是以字符串形式存储的数字。
如果第一个字符的值为1,第二个字符为2-10,则将其标记为"Lost“,依此类推。
print(x[['Segment']].head(15))
Segment
0 12
1 12
2 22
3 14
4 54
5 12
6 12
7 56
8 12
9 12
10 22
11 12
12 310
13 22
14 53我将使用的映射:
segt_map = {
r'[4-5][8-10]': 'Champion',
r'[4-5][4-7]': 'Loyal',
r'[4-5][2-3]': 'Recent',
r'3[6-10]': 'High Potential',
r'3[2-5]': 'Need Nurturing',
r'2[6-10]': 'Cannot Lose',
r'2[2-5]': 'At Risk',
r'1[2-10]': 'Lost',
}并尝试实现它:
x['Label'] = x['Segment'].replace(segt_map, regex=True)
error: bad character range 8-1 at position 6我不确定我的错误是什么,我已经检查了相关的问题,它们与我的不同。我看了看位置6,你可以在上面看到它..我找不到range 8-1?那么这里到底发生了什么呢?
完整的错误跟踪相当长,但如果需要,我可以发布它。
发布于 2019-12-13 22:29:45
字符类匹配的是字符而不是数字。[8-10]的意思是[8-1]或[0]。你想要这个:
segt_map = {
r'[4-5]([8-9]|10)': 'Champion',
r'[4-5][4-7]': 'Loyal',
r'[4-5][2-3]': 'Recent',
r'3([6-9]|10)': 'High Potential',
r'3[2-5]': 'Need Nurturing',
r'2([6-9]|10)': 'Cannot Lose',
r'2[2-5]': 'At Risk',
r'1([2-9]|10)': 'Lost',
}发布于 2019-12-13 22:28:07
您尝试使用正则表达式来检测数字范围,而它是一个用于处理对数字一无所知的文本的工具。您不能使用范围8-10,因为范围是针对字符的。可以使用[1-9],因为它是关于字符的,但是[1-10]是不正确的。相反,您应该解析文本ro数字,然后将它们与重新连接的范围进行比较。
https://stackoverflow.com/questions/59324462
复制相似问题