python - 如何将数据框变成一系列列表?

标签 python list pandas dataframe series

我不得不多次这样做,但我总是很沮丧。我有一个数据框:

df = pd.DataFrame([[1, 2, 3, 4], [5, 6, 7, 8]], ['a', 'b'], ['A', 'B', 'C', 'D'])

print df

   A  B  C  D
a  1  2  3  4
b  5  6  7  8

我想把 df 变成:

pd.Series([[1, 2, 3, 4], [5, 6, 7, 8]], ['a', 'b'])

a    [1, 2, 3, 4]
b    [5, 6, 7, 8]
dtype: object

我试过了

df.apply(list, axis=1)

这只是让我回到相同的 df

什么是方便/有效的方法?

最佳答案

您可以先通过valuesDataFrame 转换为numpy array ,然后转换为列表并最后使用 df 的索引创建新的 Series 如果需要更快的解决方案:

print (pd.Series(df.values.tolist(), index=df.index))
a    [1, 2, 3, 4]
b    [5, 6, 7, 8]
dtype: object

小DataFrame的时序:

In [76]: %timeit (pd.Series(df.values.tolist(), index=df.index))
1000 loops, best of 3: 295 µs per loop

In [77]: %timeit pd.Series(df.T.to_dict('list'))
1000 loops, best of 3: 685 µs per loop

In [78]: %timeit df.T.apply(tuple).apply(list)
1000 loops, best of 3: 958 µs per loop

和大:

from string import ascii_letters
letters = list(ascii_letters)
df = pd.DataFrame(np.random.choice(range(10), (52 ** 2, 52)),
                  pd.MultiIndex.from_product([letters, letters]),
                  letters)

In [71]: %timeit (pd.Series(df.values.tolist(), index=df.index))
100 loops, best of 3: 2.06 ms per loop

In [72]: %timeit pd.Series(df.T.to_dict('list'))
1 loop, best of 3: 203 ms per loop

In [73]: %timeit df.T.apply(tuple).apply(list)
1 loop, best of 3: 506 ms per loop

关于python - 如何将数据框变成一系列列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38713200/

相关文章:

python3本地文件的包路径

Python 属性和方法覆盖问题 : why subclass property still calls the base class's method

list - Haskell 将元组列表映射到元组列表

python - 如何从 Python 列表中删除标题和索引?

list - Prolog 仅删除唯一元素

python - 2个连续行之间的时间差

python - 允许用户删除 python 中的用户输入

python - 几秒钟前如何创建音频缓冲区以访问麦克风输入

python - 如何从数据数组中进行预测-python scikit learn pandas

python - 如何选择标签编码分类变量来创建虚拟变量?