<p>另一个不需要对行进行迭代的选项(如果有很多行,则迭代速度可能非常慢)是执行以下操作</p>
<pre><code>[ins] In [1]: df
Out[1]:
0 1 2 3 4 5 6 7
A17 a b 1 AUG) NaN NaN NaN NaN
nn6 c d 2 POS) e f 2 HI)
AVZ NaN NaN NaN NaN NaN NaN NaN
[ins] In [2]: joined = df.apply(lambda x: ' '.join([str(xi) for xi in x]), axis=1)
[ins] In [4]: split = joined.str.split(')', expand=True).reset_index(drop=False).melt(id_vars='index')
[ins] In [6]: split.drop('variable', axis=1, inplace=True)
[ins] In [7]: split
Out[7]:
index value
0 A17 a b 1 AUG
1 nn6 c d 2 POS
2 AVZ nan nan nan nan nan nan nan
3 A17 nan nan nan nan
4 nn6 e f 2 HI
5 AVZ None
6 A17 None
7 nn6
8 AVZ None
[ins] In [8]: sel = split['value'].str.strip().str.len() > 0
[ins] In [9]: split = split.loc[sel, :]
[ins] In [9]: split
Out[9]:
index value
0 A17 a b 1 AUG
1 nn6 c d 2 POS
2 AVZ nan nan nan nan nan nan nan
3 A17 nan nan nan nan
4 nn6 e f 2 HI
[ins] In [10]: out = split['value'].str.strip().str.split(' ', expand=True)
[ins] In [11]: out.index = split['index']
[ins] In [12]: out
Out[12]:
0 1 2 3 4 5 6
index
A17 a b 1 AUG None None None
nn6 c d 2 POS None None None
AVZ nan nan nan nan nan nan nan
A17 nan nan nan nan None None None
nn6 e f 2 HI None None None
</code></pre>
<p>然后把第4列放到第6列,这很简单。
我添加了一些输出,以便您可以看到每个步骤中发生了什么</p>