Python объединяет разделение и объединение в 1 строку кода - PullRequest
0 голосов
/ 27 ноября 2018

Я пытаюсь объединить разделение и объединить в строку кода, где разделение занимает только первые 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 голосов
/ 27 ноября 2018

Вы можете использовать либо аксессор 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
0 голосов
/ 27 ноября 2018

Удалить 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']]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...