python combiner split et join en 1 ligne de code

voix
2

Je suis en train de combiner une scission et se joindre en ligne de code où groupe ne prend les 3 premiers mots séparés de la colonne.

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

j'ai essayé

df['c'] = df[['a']].apply(lambda x: ', '.join((x.str.split().str[:3])))
but keep getting an error. 
Créé 27/11/2018 à 15:18
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
3

Retirer stret []pour Series, si applytravailler avec scalaires:

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

Liste alternative de compréhension:

df['c'] = [', '.join((x.split()[:3])) for x in df['a']]
Créé 27/11/2018 à 15:19
source utilisateur

voix
0

Vous pouvez utiliser les Pandas straccesseur ou une compréhension de liste avec Python régulière des strméthodes. La compréhension de la liste est généralement plus efficace. Vous devriez limiter votre séparation à 3 pour éliminer les opérations inutiles.

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
Créé 27/11/2018 à 15:36
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more