Слияние двух списков строк в пандах - PullRequest
0 голосов
/ 09 июля 2019

У меня есть датафрейм с двумя рядами 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']"}

Ответы [ 4 ]

2 голосов
/ 09 июля 2019

Я не думаю, что это 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'>
0 голосов
/ 09 июля 2019

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

0 голосов
/ 09 июля 2019

Другой способ - использовать 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 голосов
/ 09 июля 2019

ОБНОВЛЕНО

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

df=pd.DataFrame()
df['X']=[["chicken"]]
df['Y']=[["fast food","American"]]
df['tag']=df['X']+df['Y']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...