我试图将一个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.
答案 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