将pandas系列转换为一系列列表或将numpy数组转换为列表数组

时间:2016-09-30 17:45:55

标签: python pandas numpy

我有一系列s

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

使s看起来像

的有效方法是什么?
0    [1]
1    [2]
dtype: object

4 个答案:

答案 0 :(得分:4)

这是一种提取到数组并通过引入带this example的新轴延伸到2D的方法 -

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

这是类似的,但通过重塑扩展到2D -

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

使用None/np.newaxis -

进行运行时测试
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

答案 1 :(得分:2)

如果您希望结果仍为大熊猫Series,可以使用apply方法:

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

答案 2 :(得分:1)

这样做:

import numpy as np

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

答案 3 :(得分: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