基于分隔符在Python中将字符串拆分为特定子字符串并存储在多个列中

-1 投票
3 回答
72 浏览
提问于 2025-04-13 13:51

我想把这个字符串 A->B->C->D->E->F 拆分成多个子字符串,变成 A->B, B->C, C->D, D->E, E->F。

我试过用 split 方法,分隔符用 '->',但这样得到的结果并不是我想要的。希望能得到一些帮助!

我在一个数据框的某一列中有多个这样的值。我想根据最多能拆分的次数创建新的列,然后把每个拆分的结果存放到数据框的相应列中。期望的输出

3 个回答

0

你可以使用 str.split 这个方法来把字符串分开,使用 itertools.pairwise 来处理成对的数据,使用 map 来对每个元素进行操作,还有 str.join 来把分开的部分再合并起来:

from itertools import pairwise

s = 'A->B->C->D->E->F'
out = ','.join(map('->'.join, pairwise(s.split('->'))))

输出结果:

'A->B,B->C,C->D,D->E,E->F'

如果你有一个 Series 或 DataFrame,逻辑也是类似的:

from itertools import pairwise

df = pd.DataFrame({'Input': ['A->B->C->D',
                             'X->Y->Z',
                             'A->B->Z->D->Y',
                             'X->Y->A->E->F']})

out = df.join(pd.DataFrame([['->'.join(x) for x in pairwise(s.split('->'))]
                            for s in df['Input']])
                .rename(columns=lambda x: f'split {x+1}'))

           Input split 1 split 2 split 3 split 4
0     A->B->C->D    A->B    B->C    C->D     NaN
1        X->Y->Z    X->Y    Y->Z     NaN     NaN
2  A->B->Z->D->Y    A->B    B->Z    Z->D    D->Y
3  X->Y->A->E->F    X->Y    Y->A    A->E    E->F
2

你可以先把所有的字母按顺序放到一个列表里,然后再用一个循环,从每个字母开始,生成你想要的子字符串,使用的索引是“idx”和“idx + 1”。

my_string = "A->B->C->D->E->F"
items = my_string.split("->")
substrings = []

for idx in range(len(items) - 1):
  substrings.append(items[idx] + "->" + items[idx+1])
2

从提问者的描述来看,可能需要一个子字符串的列表。如果是这样的话...

from itertools import pairwise

s = "A->B->C->D->E->F"

result = ["->".join(p) for p in pairwise(s.split("->"))]

print(result)

输出结果:

['A->B', 'B->C', 'C->D', 'D->E', 'E->F']

撰写回答