Python 为每个字符拆分数据帧列

Python 为每个字符拆分数据帧列,python,pandas,dataframe,Python,Pandas,Dataframe,我有多个dataframe列,如下所示: Day1 0 DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD 1 DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD 2 DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD 3 DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBB

我有多个dataframe列,如下所示:

                         Day1
0    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
1    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
2    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
3    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
4    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
我想要的是,每个字符都在自己的列中分开:

     012345678910111213....
0    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
1    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
2    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
3    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
4    DDDDDDDDDDBBBBBBAAAAAAAAAABBBBBBDDDDDDDDDDDDDDDD
因此,“第1天-列”被分成48列,每列都有一个值A/B/C/D


我尝试使用split,但没有成功。

您可以调用
apply
,并且对于
列表中的
值,每行调用
pd.Series

In [16]:

df['Day1'].apply(lambda x: pd.Series(list(x)))
Out[16]:
  0  1  2  3  4  5  6  7  8  9  ... 38 39 40 41 42 43 44 45 46 47
0  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
1  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
2  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
3  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
4  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D

[5 rows x 48 columns]

看起来您有尾随空格,请使用
str.rstrip
删除这些空格:

df['Day1'] = df['Day1'].str.rstip()
然后使用以下方法执行上述操作:

试试这个:

df['Day1'].str.split(pat=“\s*”,expand=True)

它将有空的第一列和最后一列,因此您必须使用
df['Day1'].iloc[:,1:-1]

嘿,我试过你的方法……我编辑了我的问题,有什么问题吗wrong@WarryS.,有前导空格还是尾随空格?
df.Day1.str.len()
的输出是什么?它的每个条目@MaxU都有48个vor,值之间没有spaces@WarryS.,我无法使用提供的样本数据集重现此行为:(感谢您的帮助@MaxUPost raw data,将您的数据加载到df中的代码,如果我们的答案不起作用,为了让我们尝试复制您的问题看起来您有尾随空格,请尝试
dataframe['Mo']dataframe['Mo'].str.rstrip()
要删除任何尾随空格shi@EdChum,我这样做了,但结果仍然是一样的…请参阅我的第一条评论,没有数据复制,这变成了钓鱼探险。我发现了问题,我有尾随空格。谢谢!!!@EdChum
In [19]: df.Day1.str.extractall('(.)', flags=re.U)[0].unstack().rename_axis(None, 1)
Out[19]:
  0  1  2  3  4  5  6  7  8  9  ... 38 39 40 41 42 43 44 45 46 47
0  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
1  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
2  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
3  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D
4  D  D  D  D  D  D  D  D  D  D ...  D  D  D  D  D  D  D  D  D  D

[5 rows x 48 columns]