Сохранить список как список в столбце данных Pandas - PullRequest
0 голосов
/ 15 января 2020

Я пытаюсь объединить 2 (строковых) столбца 'col1' и 'col2' в кадре данных, токенизировать объединенную строку и сохранить полученный список как еще один новый столбец 'result'.

Желаемый вывод:

col1              col2          result
apples bananas    oranges       ['apples','bananas','oranges']
mangoes           apples        ['mangoes','apples']

Я делаю это:

df['result'] = df['col1'].str.cat(df['col2'],sep=" ")
df['result'] = df.result.apply(lambda result: list(re.split(r'\W+', result)))

Но я получаю это как вывод:

col1              col2          result
apples bananas    oranges       [apples,bananas,oranges]
mangoes           apples        [mangoes,apples]

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 15 января 2020

Это работает:

Yo может связать ваш объект dataframe следующим кодом:

import pandas as pd

list1= ['Apple Banana','Mangos']
list2= ['Orange','Apples']

dataframe=pd.DataFrame(data=[list1,list2],columns=['Col1','Col2'])

concat_result= list(dataframe['Col1'] +" " + dataframe['Col2']) # concatenate both the columns and convert that into a list type and store it in concat_result label

new_List=[]  #Create new label type list so we can append values.
final_list=[] #Final object which will contain single quoted String.

for item in concat_result:   #Loop through the list and append the elements after splitting default space. 
    new_List.append(item.split())


for new in new_List:   #new_List has two child list, so iterate over them
    for_single_quote=[]
    for inner_list_string in new:  # child List elements
        for_single_quote.append("'%s'" %inner_list_string)
    final_list.append(for_single_quote)

dataframe['result']= final_list

Затем, наконец, добавить новую строку в dataframe и назначить список:

dataframe['result']= final_list

Вы получите ожидаемый результат.

0 голосов
/ 15 января 2020

Я думаю, что ваше решение в порядке, также возможно использовать Series.str.split, если оба столбца заполнены строками.

'' не отображаются только.

print (df[['col1','col2']].iloc[0].apply(type))
col1     <class 'str'>
col2     <class 'str'>
Name: 0, dtype: object

df['result'] = df['col1'].str.cat(df['col2'],sep=" ").str.split()
print (df)
             col1     col2                      result
0  apples bananas  oranges  [apples, bananas, oranges]
1         mangoes   apples           [mangoes, apples]

Если первый столбец заполнен списками, а второй - строками:

print (df[['col1','col2']].iloc[0].apply(type))
col1    <class 'list'>
col2     <class 'str'>
Name: 0, dtype: object

df['result'] = df['col1'] + df['col2'].str.split()
...