熊猫-按数字和字母拆分并保存最后的拆分

时间:2018-07-20 03:06:17

标签: python regex pandas

我有一个series的字符串,格式为:

12345678ABC
12345678ABCDEF
12345A6789AB
12A3456ABC

我只想在结尾字母的开头分割并输出,如下所示:

1  12345678       ABC
2  12345678       ABCDEF
3  12345A6789     AB
4  12A3456        ABC
  • 前面的“数字”字符串可以包含一些A-Z字符,例如3&4。
  • “数字”和“字母”的长度是可变的(字母上限为6)。

我尝试做df['ID'].str.split('[a-zA-Z]'),希望能抓住最后的-1拆分,但输出中不包含字母。希望在不使用re的情况下在熊猫中完成此操作。

谢谢

2 个答案:

答案 0 :(得分:2)

使用带有Series.str.extract的正则表达式,其中第一个捕获组是直到最后一位数字的所有内容,然后下一个捕获组是剩余的所有字母。我添加了可选的捕获组,以便在您的字符串包含所有数字或所有字母的情况下使用。

s = pd.Series(['12345678ABC', '12345678ABCDEF', '12345A6789AB', 
               '12A3456ABC', '1234123', 'ABCDERED'])

s.str.extract('(?:(.*\d))?(?:([a-zA-Z]+))?')

输出:

            0         1
0    12345678       ABC
1    12345678    ABCDEF
2  12345A6789        AB
3     12A3456       ABC
4     1234123       NaN
5         NaN  ABCDERED

答案 1 :(得分:0)

# Let A be the array containing strings
# Let nA be the seperated string array
# Let pA be the prefix array
for i in A:
    t = -1
    for index, character in enumerate(i[::-1]):
        if character.isdigit():
            t = index + 1
            break
    nA.append(i[t:])
    pA.append(i[:t])
for index, i in enumerate(A):
    print(pA[index], ' ', nA[index])