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

Python 如何将字符串拆分为字符矩阵,python,string,pandas,split,Python,String,Pandas,Split,假设我们在Python中有这个数组: import pandas as pd arr = pd.DataFrame(['aabbc','aabccca','aa']) 我想将每一行拆分为其字符的列。行的长度可能不同。 这是我期望的输出(本例中为3*7矩阵): 我的矩阵的行数是20000,我不喜欢对循环使用。原始数据是蛋白质序列。 我读了,等等,他们没有帮我 选项1 一个简单的方法是使用列表理解 pd.DataFrame([list(x) for x in arr[0]]) 0 1

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

import pandas as pd
arr = pd.DataFrame(['aabbc','aabccca','aa'])
我想将每一行拆分为其字符的列。行的长度可能不同。 这是我期望的输出(本例中为3*7矩阵):

我的矩阵的行数是20000,我不喜欢对循环使用
。原始数据是蛋白质序列。

我读了,等等,他们没有帮我

选项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)


选项3
操作
视图
-

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

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
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