python将split和join合并为1行代码

时间:2018-11-27 15:18:36

标签: python string pandas lambda

我试图将一个split合并到代码行中,其中split只采用列中前3个单词分隔。

df['c'] = df[['a']].apply(lambda x: x.str.split().str[:3])
df['c'] = df['c'].apply(lambda x: ', '.join(x))

我尝试了

df['c'] = df[['a']].apply(lambda x: ', '.join((x.str.split().str[:3])))
but keep getting an error. 

2 个答案:

答案 0 :(得分:3)

str删除[]Series,因此apply使用标量:

df['c'] = df['a'].apply(lambda x: ', '.join((x.split()[:3])))

列表理解选项:

df['c'] = [', '.join((x.split()[:3])) for x in df['a']]

答案 1 :(得分:0)

您可以将Pandas str访问器或列表推导与常规Python str方法一起使用。列表理解通常更有效。您应该将拆分限制为3,以消除不必要的操作。

df = pd.DataFrame({'A': ['ab cd ef gh ij', 'kl mn op qr', 'st uv', 'wx yz 123 456']})

df['B'] = df['A'].str.split(n=3).str[:3].str.join(', ')
df['C'] = [', '.join(x.split(maxsplit=3)[:3]) for x in df['A']]

assert df['B'].equals(df['C'])

print(df)

                A            B            C
0  ab cd ef gh ij   ab, cd, ef   ab, cd, ef
1     kl mn op qr   kl, mn, op   kl, mn, op
2           st uv       st, uv       st, uv
3   wx yz 123 456  wx, yz, 123  wx, yz, 123