将数据帧重新整形为具有无限行的数据帧,并在没有值的情况下填充零

时间:2018-02-05 19:23:24

标签: python pandas numpy dataframe reshape

有没有办法将DataFrame重塑为另一个具有不受限制的行的形状。我只想要一个包含3列的DataFrame,无论DataFrame中有多少行?

例如,

letters = pd.DataFrame({'Letters' : ['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 
'I','J']})

Letters
0   A
1   B
2   C
3   D
4   E
5   F
6   G
7   H
8   I
9   J

我希望像填充零一样重塑它,没有任何价值。

first   second  third
A       B       C
D       E       F
G       H       I
J       0       0

据我所知,在numpy reshape方法中你需要明确识别你想要多少列和行..

2 个答案:

答案 0 :(得分:4)

您可以使用NumPy reshapearr.reshape((-1, 3))告诉NumPy根据arr的大小和其他给定维度的大小,重塑(n, 3)以塑造narr计算import numpy as np import pandas as pd letters = pd.DataFrame({'Letters' : ['A', 'B', 'C','D', 'E', 'F', 'G', 'H', 'I','J']}) arr = np.empty(((len(letters) - 1)//3 + 1)*3, dtype='O') arr[:len(letters)] = letters['Letters'] result = pd.DataFrame(arr.reshape((-1, 3)), columns='first second third'.split()) result = result.fillna(0) print(result) 的位置{ s)(例如,在本例中,值为3)。

  first second third
0     A      B     C
1     D      E     F
2     G      H     I
3     J      0     0

打印

a = 5

答案 1 :(得分:3)

使用:

df = (pd.DataFrame(letters.groupby(letters.index // 3)['Letters']
                          .apply(list)
                          .values
                          .tolist(), columns=['first','second','third']).fillna(0))

print (df)
  first second third
0     A      B     C
1     D      E     F
2     G      H     I
3     J      0     0