如何使用pandas根据多个字符串索引拆分列
我想把每一行的数据根据几个索引分成新的列:
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
注意:你还可以使用命名组(具体可以查看文档)。