将具有多列的数据集分成多行-熊猫

时间:2020-02-27 20:11:06

标签: python pandas dataset

我有一个完整的数据集,仅排成一行。该数据集应具有7列和360行。

举例来说,第一个位置是:

df = [1,14/02/2013,3.305,55,206,05,25,3.536,60,349.027,78,2,14/03/2013,3.299,07,205,59,25, 3.529,66,348.055,56,3,14/04/2013,3.292,59,205,13,25,3.522,72,347.083,34,4,14/05/2013,3.286,11,204,67, 25,3.515,78,346.111,12,5,14/06/2013,3.279,63,204,22,25,3.508,84,345.138,90]

我需要它们为:

  • 1,14/02/2013,3.305,55,206,05,25,3.536,60,349.027,78
  • 2,14/03/2013,3.299,07,205,59,25,3.529,66,348.055,56
  • 3,14/04/2013,3.292,59,205,13,25,3.522,72,347.083,34
  • 4,14/05/2013,3.286,11,204,67,25,3.515,78,346.111,12
  • 5,14/06/2013,3.279,63,204,22,25,3.508,84,345.138,90

如何在python / pandas中做到这一点?

谢谢。

3 个答案:

答案 0 :(得分:3)

您可以使用numpy array_split()将列表的len除以所需的列数。

import pandas as pd
import numpy as np

d = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21]

pd.DataFrame(np.array_split(d,len(d)/7))

输出

    0   1   2   3   4   5   6
0   1   2   3   4   5   6   7
1   8   9  10  11  12  13  14
2  15  16  17  18  19  20  21

答案 1 :(得分:2)

使用zipiter

pd.DataFrame(list(zip(*[iter(d)] * 7)))

    0   1   2   3   4   5   6
0   1   2   3   4   5   6   7
1   8   9  10  11  12  13  14
2  15  16  17  18  19  20  21

使用np.reshape
这要求d的长度是7的倍数,否则会中断。

pd.DataFrame(np.reshape(d, (-1, 7)))

    0   1   2   3   4   5   6
0   1   2   3   4   5   6   7
1   8   9  10  11  12  13  14
2  15  16  17  18  19  20  21

修复棘手的问题...但是只能抓到最新的7人组

pd.DataFrame(np.reshape(d[:len(d) // 7 * 7], (-1, 7)))

答案 2 :(得分:0)

我认为,最直接的解决方案是使用 Numpy 中的 reshape 方法。 第一个参数是 -1 -根据需要创建任意多的行,第二个参数是 7 - 列数:

df = pd.DataFrame(df.values.reshape(-1, 7))

也许您还应该传递 columns 参数,以设置有意义的列名。