Python - 将字符串拆分为多个列

时间:2017-01-19 11:14:51

标签: python string pandas split

我有一个数据框,其中包含一个带字符串的列。它看起来像:

[a]
aaa aa a aaaa
bbb bbb b
cc cccc ccc cc ccc

我想要的是添加6个分段值为[a]的列,如下所示:

[a]                     [a0]    [a1]    [a2]    [a3]    [a4]    [a5]
aaa aa a aaaa           aaa     aa      a       aaaa    NaN     NaN
bbb bbb b               bbb     bbb     b       NaN     NaN     NaN
cc cccc ccc cc ccc      cc      cccc    ccc     cc      ccc     NaN

我使用此代码:

for i in range(6):
     df["a{}".format(i)] = df[a].apply(lambda x:x.split(' ')[i])

但我有一个超出范围的'错误,可以解释,因为所有值都没有相同的数字元素。

如何避免此错误,并将错误中的所有值替换为无?

提前致谢。 BR,

编辑:我们事先不知道要拆分的字符串的长度。它包含2个出现的东西,有时4个等等。

2 个答案:

答案 0 :(得分:3)

您可以使用str.split并提供expand=True,以便将其放大为每个单独拆分的数据框。

通过提供添加的范围重新索引这些内容,以便我们可以使用NaNs创建额外的列。稍后提供可选的前缀char。

然后,连接原始列和提取的DF's列。

str_df = df['a'].str.split(expand=True).reindex(columns=np.arange(6)).add_prefix('a')
pd.concat([df, str_df], axis=1).replace({None:np.NaN})

enter image description here

答案 1 :(得分:1)

你快到了:) 您所要做的就是在当前lambda函数的末尾添加以下小条件:

if len(x.split(" "))>i else None

您的代码变为:

for i in range(6):
     df["a{}".format(i)] = df[a].apply(lambda x: x.split(' ')[i] if len(x.split(' ')>i else None)