我有一个完整的数据集,仅排成一行。该数据集应具有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]
我需要它们为:
如何在python / pandas中做到这一点?
谢谢。
答案 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)
使用zip
和iter
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 参数,以设置有意义的列名。