如何使用pandas基于多个字符串索引拆分列

时间:2014-08-11 20:52:04

标签: python pandas

我想根据几个索引将每一行拆分成新列:

6ABCDE0218594STRING

6 ABCDE 021 8594 STRING

这似乎至少被问过一次,但我一直只能找到问题的变体(用pandas: How do I split text in a column into multiple rows?中的分隔符分隔,使用而不是使用新列分隔成新行,再次使用分隔符:Split pandas dataframe string entry to separate rows)。

如果这是重复的话我提前道歉!

3 个答案:

答案 0 :(得分:3)

一种方法是使用正则表达式和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

注意:您还可以使用命名组(请参阅the docs)。

答案 1 :(得分: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']

答案 2 :(得分: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