如何将字符串拆分为字符矩阵

时间:2018-01-23 17:04:46

标签: python string pandas split

假设我们在Python中有这个数组:

import pandas as pd
arr = pd.DataFrame(['aabbc','aabccca','aa'])

我想将每一行拆分为其角色的列。行的长度可能不同。 它是我期望的输出(在这种情况下为3 * 7矩阵):

  1   2   3   4   5   6   7
1 a   a   b   b   c   Na  Na
2 a   a   b   c   c   c   a
3 a   a   Na  Na  Na  Na  Na

我的矩阵的行数是20000,我不想使用for loops。原始数据是蛋白质序列。 我看了[1][2][3]等,但他们没有帮助我。

1 个答案:

答案 0 :(得分:3)

选项1
一种简单的方法是使用列表推导。

pd.DataFrame([list(x) for x in arr[0]])

   0  1     2     3     4     5     6
0  a  a     b     b     c  None  None
1  a  a     b     c     c     c     a
2  a  a  None  None  None  None  None

或者,使用apply(list)做同样的事情。

pd.DataFrame(arr[0].apply(list).tolist())

   0  1     2     3     4     5     6
0  a  a     b     b     c  None  None
1  a  a     b     c     c     c     a
2  a  a  None  None  None  None  None

选项2
替代extractall + unstack。您最终会得到一个多列索引。您可以删除结果的第一级。

v = arr[0].str.extractall(r'(\w)').unstack()
v.columns = v.columns.droplevel(0)

v

match  0  1     2     3     4     5     6
0      a  a     b     b     c  None  None
1      a  a     b     c     c     c     a
2      a  a  None  None  None  None  None

选项3
操纵view -

v = arr[0].values.astype(str)
pd.DataFrame(v.view('U1').reshape(v.shape[0], -1))

   0  1  2  3  4  5  6
0  a  a  b  b  c      
1  a  a  b  c  c  c  a
2  a  a       

这会在单元格中为您提供空字符串('')而不是None s。如果要将其添加回来,请使用replace