У меня есть датафрейм с двумя рядами x и y. Я хочу объединить их, чтобы создать новую серию: тег, но я не могу достичь ожидаемого результата. Я пробовал:

df['tag'] = df['x'] + df['y']

Я искал повсюду и не смог найти решение проблемы.

Текущие результаты.

x                               y           tag
['fast food', 'american']   ['chicken'] ['fast food', 'american']['chicken']

Ожидаемый результат:

x                               y           tag
['fast food', 'american']   ['chicken'] ['fast food', 'american', 'chicken']

< Сильный > df.to_dict ( )

{'x': "['fast food', 'american']",
 'y': "['chicken']"}
0
Pepe 9 Июл 2019 в 04:03

4 ответа

Лучший ответ

Я не думаю, что это list, поэтому вы можете преобразовать его в list, в него вы можете sum

import ast
df.x = df.x.apply(ast.literal_eval)
df.y = df.y.apply(ast.literal_eval)

df['tag'] = df['x'] + df['y']

Больше информации

df=pd.DataFrame()
df['y']=["['chicken']"]
df['x']=["['fast food', 'american']"]
df.applymap(type)
Out[295]: 
               y              x
0  <class 'str'>  <class 'str'>


df.x = df.x.apply(ast.literal_eval)
df.y = df.y.apply(ast.literal_eval)
df.applymap(type)
Out[297]: 
                y               x
0  <class 'list'>  <class 'list'>
2
YO and BEN_W 9 Июл 2019 в 01:15

Другой способ - использовать re.findall:

import re

df.applymap(lambda x:re.findall("'(.+?)'", x)).sum(1)

Который вернет list из str с:

                           x            y                             tag
0  ['fast food', 'american']  ['chicken']  [fast food, american, chicken]
0
Chris 9 Июл 2019 в 02:28

< Сильный > ОБНОВЛЕНО

Попробуй это :

df=pd.DataFrame()
df['X']=[["chicken"]]
df['Y']=[["fast food","American"]]
df['tag']=df['X']+df['Y']
-1
JKC 10 Июл 2019 в 03:40

Вы можете распаковать список и использовать приложение для создания нового столбца. введите описание изображения здесь

0
Gustavo Gradvohl 9 Июл 2019 в 02:39