如何使用pandas根据多个字符串索引拆分列

4 投票
3 回答
4693 浏览
提问于 2025-04-18 16:53

我想把每一行的数据根据几个索引分成新的列:

6ABCDE0218594STRING

变成

6 ABCDE 021 8594 STRING

这看起来之前至少有人问过一次,但我一直只找到一些变种的问题(比如用分隔符把文本分成多行,像在pandas: 如何把一列中的文本分成多行?,或者用分隔符把数据分成新行,而不是新列,像在把pandas数据框中的字符串分开成新行)。

如果这个问题是重复的,我提前道歉!

3 个回答

0

试试这个:

string = '6ABCDE0218594STRING'
indices = [1,5,3,4]
myList = []

for index in indices:
    token, string = string[:index],string[index:]
    myList.append(token)

myList.append(string)

>>> Output: ['6', 'ABCDE', '021', '8594', 'STRING']
0

或者如果你不知道数字、字母等的数量:

import re

m = re.match('(\d*)([A-Z]*)(\d*)([A-Z]*)', '6ABCDE0218594STRING').groups()
print m[0], m[1], m[2], m[3]

输出结果:

6 ABCDE 0218594 STRING
4

一种方法是使用正则表达式和str.extract来提取出列数据:

In [11]: df = pd.DataFrame([['6ABCDE0218594STRING']])

你也可以直接用索引来做,像这样:

In [12]: df[0].str.extract('(.)(.{5})(.{3})(.{4})(.*)')
Out[12]:
   0      1    2     3       4
0  6  ABCDE  021  8594  STRING

或者你可以更加小心,确保每一列的数据格式都是正确的:

In [13]: df[0].str.extract('(\d)(.{5})(\d{3})(\d{4})(.*)')
Out[13]:
   0      1    2     3       4
0  6  ABCDE  021  8594  STRING

注意:你还可以使用命名组(具体可以查看文档)。

撰写回答