2015-06-17 2 views
3

У меня есть панда серия списков строк:панда серия списков к одной серии

0       [slim, waist, man] 
1        [slim, waistline] 
2          [santa] 

Как вы можете видеть, списки отличаться в зависимости от длины. Я хочу, чтобы это эффективный способ свернуть это в одной серии

0 slim 
1 waist 
2 man 
3 slim 
4 waistline 
5 santa 

Я знаю, что могу разбить списки с помощью

series_name.split(' ') 

Но я с трудом поставив эти строки обратно в один список.

Спасибо!

+0

Возможный дубликат [как извлечь вложенные списки?] (Http://stackoverflow.com/questions/8327856/how-to-extract-nested-lists) – tegancp

ответ

6

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

Вы просто должны быть в состоянии перебрать элементы серии:

slist =[] 
for x in series: 
    slist.extend(x) 

или дождевик (но труднее понять) список понимания:

slist = [st for row in s for st in row] 
0

Вы можете использовать оператор список конкатенации, как показано ниже -

lst1 = ['hello','world'] 
lst2 = ['bye','world'] 
newlst = lst1 + lst2 
print(newlst) 
>> ['hello','world','bye','world'] 

Или вы можете использовать list.extend() функцию, как показано ниже -

lst1 = ['hello','world'] 
lst2 = ['bye','world'] 
lst1.extend(lst2) 
print(lst1) 
>> ['hello', 'world', 'bye', 'world'] 

Преимущества использования extend функции является то, что она может работать на нескольких типах , где оператор concatenation будет работать только в том случае, если оба LHS и RHS являются списками.

Другие примеры extend функции -

lst1.extend(('Bye','Bye')) 
>> ['hello', 'world', 'Bye', 'Bye'] 
2

Вы можете попробовать использовать itertools.chain просто расплющить списки:

In [70]: from itertools import chain 
In [71]: import pandas as pnd 
In [72]: s = pnd.Series([['slim', 'waist', 'man'], ['slim', 'waistline'], ['santa']]) 
In [73]: s 
Out[73]: 
0 [slim, waist, man] 
1  [slim, waistline] 
2    [santa] 
dtype: object 
In [74]: new_s = pnd.Series(list(chain(*s.values))) 
In [75]: new_s 
Out[75]: 
0   slim 
1  waist 
2   man 
3   slim 
4 waistline 
5  santa 
dtype: object 
9

Вот простой метод с использованием только панды функции:

import pandas as pd 

s = pd.Series([ 
    ['slim', 'waist', 'man'], 
    ['slim', 'waistline'], 
    ['santa']]) 

Тогда

s.apply(pd.Series).stack().reset_index(drop=True) 

дает желаемый результат. В некоторых случаях вы можете сохранить исходный индекс и добавить второй уровень для индексации вложенных элементов, например.

0 0   slim 
    1  waist 
    2   man 
1 0   slim 
    1 waistline 
2 0  santa 

Если это то, что вы хотите, просто опускает .reset_index(drop=True) из цепочки.

Смежные вопросы