У меня есть ряд s
Turn панды серии в серии списков или Numpy массива в массив списков
s = pd.Series([1, 2])
Что такое эффективный способ сделать s
выглядеть
0 [1]
1 [2]
dtype: object
У меня есть ряд s
Turn панды серии в серии списков или Numpy массива в массив списков
s = pd.Series([1, 2])
Что такое эффективный способ сделать s
выглядеть
0 [1]
1 [2]
dtype: object
Вот один подход, который извлекает в массив и продолжается до 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
Это делает это:
import numpy as np
np.array([[a] for a in s],dtype=object)
array([[1],
[2]], dtype=object)
Если вы хотите результат по-прежнему быть панд 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
Настройка ответа 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
Гораздо лучше подход по сравнению с моим. –
@ Divakar Для полноты вы можете добавить «Approach3» с 'pd.Series (memoryview (s.values.reshape (-1,1)). Tolist())', поскольку он должен быть даже быстрее (как минимум с моей текущей конфигурацией), чтобы построить 'Series' на' memoryview' (вероятно, более видимым с большим образцом). – mgc
@mgc Это только для python3? В моем конце с python 2.7 я получаю эту ошибку: '" NotImplementedError: tolist() поддерживает только представления байтов "' при попытке сделать: 'memoryview (s.values.reshape (-1,1)). Tolist () '. – Divakar