Python concat по списку строк внутри фрейма данных - PullRequest
0 голосов
/ 27 мая 2020

У меня есть этот df:

name | attach
John | ['0001','0002']
Peter | ['0003']

Мне нужно преобразовать каждое значение в списке вложений в ссылку: Например:

name | attach
John | ['http://www.test.com/0001/download', 'http://www.test.com/0002/download']
Peter | ['http://www.test.com/0003/download']

Где каждое значение является ключом в ссылке для загрузки.

Я пытался использовать apply fun c, но не сработало:

link_part1 = 'http://www.test.com/'
link_part2 = '/download'

df['attach'] = df['attach'].apply(lambda x: x if x is np.NaN else link_part1 + x + link_part2)

отображается следующая ошибка: TypeError: может только объединить str (не "список") с str

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

В приведенном выше примере столбец attach содержит списки, поэтому, когда вы пытаетесь добавить свои две строки link_part1 и link_part2, вы получаете эту ошибку TypeError, поскольку вы не можете объединить эти типы.

Вы захотите сделать такое преобразование для каждого элемента списков в attach. Кроме того, сделайте код немного чище, определив функцию, а не используя в этом случае лямбду. Это немного длинновато для лямбды:

def make_link(attach):
    start = 'http://www.test.com/'
    end = '/download'
    return [f"{start}{x}{end}" for x in attach]

df['attach'] = df['attach'].apply(make_link)

1 голос
/ 27 мая 2020

Взгляните на сообщение об ошибке: оно сообщает вам, что вы пытаетесь объединить список со строкой str, которая может относиться только к операциям '+', которые вы используете в лямбда-функции. Однако вы почти все сделали правильно, поскольку вам просто нужно учитывать тот факт, что записи в 'attach' являются списками строк , а не строками сами по себе:

df['attach'] = df['attach'].apply(lambda x: x if x is np.NaN else [link_part1+id+link_part2 for id in x]) 

должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...