2016-09-30 3 views

ответ

4

Вот один подход, который извлекает в массив и продолжается до 2D путем введения новой оси с None/np.newaxis -

pd.Series(s.values[:,None].tolist()) 

Вот подобный один, но распространяется на 2D от изменения формы -

pd.Series(s.values.reshape(-1,1).tolist()) 

тест выполнения с использованием @P-robot's setup -

In [43]: s = pd.Series(np.random.randint(1,10,1000)) 

In [44]: %timeit pd.Series(np.vstack(s.values).tolist()) # @Nickil Maveli's soln 
100 loops, best of 3: 5.77 ms per loop 

In [45]: %timeit pd.Series([[a] for a in s]) # @P-robot's soln 
1000 loops, best of 3: 412 µs per loop 

In [46]: %timeit s.apply(lambda x: [x]) # @mgc's soln 
1000 loops, best of 3: 551 µs per loop 

In [47]: %timeit pd.Series(s.values[:,None].tolist()) # Approach1 
1000 loops, best of 3: 307 µs per loop 

In [48]: %timeit pd.Series(s.values.reshape(-1,1).tolist()) # Approach2 
1000 loops, best of 3: 306 µs per loop 
+0

Гораздо лучше подход по сравнению с моим. –

+0

@ Divakar Для полноты вы можете добавить «Approach3» с 'pd.Series (memoryview (s.values.reshape (-1,1)). Tolist())', поскольку он должен быть даже быстрее (как минимум с моей текущей конфигурацией), чтобы построить 'Series' на' memoryview' (вероятно, более видимым с большим образцом). – mgc

+0

@mgc Это только для python3? В моем конце с python 2.7 я получаю эту ошибку: '" NotImplementedError: tolist() поддерживает только представления байтов "' при попытке сделать: 'memoryview (s.values.reshape (-1,1)). Tolist () '. – Divakar

1

Это делает это:

import numpy as np 

np.array([[a] for a in s],dtype=object) 
array([[1], 
     [2]], dtype=object) 
2

Если вы хотите результат по-прежнему быть панд Series вы можете использоватьметод:

In [1]: import pandas as pd 

In [2]: s = pd.Series([1, 2]) 

In [3]: s.apply(lambda x: [x]) 
Out[3]: 
0 [1] 
1 [2] 
dtype: object 
1

Настройка ответа atomh33ls', вот ряд списков:

output = pd.Series([[a] for a in s]) 
type(output) 
>> pandas.core.series.Series 
type(output[0]) 
>> list 

тайминги для выбора предложений:

import numpy as np, pandas as pd 
s = pd.Series(np.random.randint(1,10,1000)) 

>> %timeit pd.Series(np.vstack(s.values).tolist()) 
100 loops, best of 3: 3.2 ms per loop 

>> %timeit pd.Series([[a] for a in s]) 
1000 loops, best of 3: 393 µs per loop 

>> %timeit s.apply(lambda x: [x]) 
1000 loops, best of 3: 473 µs per loop 
Смежные вопросы