我不知道该过程是否可以通过str.split来实现。但是例如,我在数据框df中有以下列:
Column
0 a-b-c-d-e-f-g-h-i-j
1 a-a-b-b-c-c
2 a-a-b-b
我知道,如果我这样做
df['Column'].str.split('-', expand=True)
然后我将得到如下结果:
0 1 2 3 4 5 6 7 8 9
0 a b c d e f g h i j
1 a a b b c c None None None None
2 a a b b None None None None None None
根据拆分时的最大元素数创建许多列。
我想知道是否有可能总是有10列而不管元素的数量如何,只要它在0到10之间,并像下面这样用'None'填充其余的列即可。
因此,这将引起以下专栏:
Column
0 a-b-c-d-e-f-g-h
1 a-a-b-b-c-c
2 a-a-b-b
进入:
0 1 2 3 4 5 6 7 8 9
0 a b c d e f g h None None
1 a a b b c c None None None None
2 a a b b None None None None None None
答案 0 :(得分:5)
reindex
通过 user3483203
df.Column.str.split('-', expand=True).reindex(columns=range(10))
0 1 2 3 4 5 6 7 8 9
0 a b c d e f g h i j
1 a a b b c c None None None None
2 a a b b None None None None None None
一种理解方法
pd.DataFrame([
(lambda l: l + [None] * (10 - len(l)))(x.split('-'))
for x in df.Column
], df.index)
0 1 2 3 4 5 6 7 8 9
0 a b c d e f g h None None
1 a a b b c c None None None None
2 a a b b None None None None None None
答案 1 :(得分:1)
您可以在下面使用:
pd.concat([pd.DataFrame([np.nan]*10).T, pd.DataFrame(df['Column'].str.split('-').tolist())], ignore_index=True).iloc[1:]
输出:
0 1 2 3 4 5 6 7 8 9
1 a b c d e f g h NaN NaN
2 a a b b c c NaN NaN NaN NaN
3 a a b b NaN NaN NaN NaN NaN NaN