我想根据几个索引将每一行拆分成新列:
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)。
如果这是重复的话我提前道歉!
答案 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