我有一个数据框,其中包含一个带字符串的列。它看起来像:
[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个等等。答案 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})
答案 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)