将numpy数组转换为pandas数据帧

时间:2018-05-31 12:12:28

标签: python pandas numpy

我有一个大小为31x36的numpy数组,我想转换成pandas数据帧以便处理它。我试图使用以下代码转换它:

pd.DataFrame(data=matrix,
          index=np.array(range(1, 31)),
          columns=np.array(range(1, 36)))

但是,我收到以下错误:

  

ValueError:传递值的形状为(36,31),index表示暗示(35,30)

如何解决问题并正确转换?

3 个答案:

答案 0 :(得分:4)

至于你尝试失败的原因,范围是1

pd.DataFrame(data=matrix,
          index=np.array(range(1, 32)),
          columns=np.array(range(1, 37)))

由于最后一个值未包含在范围

实际上看看你在做什么,你可以做到:

pd.DataFrame(data=matrix,
          index=np.arange(1, 32)),
          columns=np.arange(1, 37)))

或纯粹的pandas

pd.DataFrame(data=matrix,
          index=pd.RangeIndex(range(1, 32)),
          columns=pd.RangeIndex(range(1, 37)))

此外,如果您未指定索引和列参数,则会生成自动生成的索引和列,这些列将从0开始。不清楚为什么需要他们从1

开始

你也可能没有传递索引和列参数,只是在构造后修改它们:

In[9]:
df = pd.DataFrame(adaption)
df.columns = df.columns+1
df.index = df.index + 1
df

Out[9]: 
          1         2         3         4         5         6
1 -2.219072 -1.637188  0.497752 -1.486244  1.702908  0.331697
2 -0.586996  0.040052  1.021568  0.783492 -1.263685 -0.192921
3 -0.605922  0.856685 -0.592779 -0.584826  1.196066  0.724332
4 -0.226160 -0.734373 -0.849138  0.776883 -0.160852  0.403073
5 -0.081573 -1.805827 -0.755215 -0.324553 -0.150827 -0.102148

答案 1 :(得分:1)

除上述答案外,range(1, X)还介绍了从1X-1的数字集合。您需要使用range(1, 32)range(1, 37)来执行您所描述的内容。

答案 2 :(得分:1)

您遇到错误,因为end中的range(start, end)参数非包含。您可以通过以下几种方式解决此问题:

不要传递索引和列

只需使用df = pd.DataFrame(matrix)即可。 pd.DataFrame构造函数隐式添加整数索引。

传递数组的形状

matrix.shape提供行和列计数的元组,因此您无需手动指定它们。例如:

df = pd.DataFrame(matrix, index=range(matrix.shape[0]),
                          columns=range(matrix.shape[1]))

如果您需要从1开始,请记得添加1:

df = pd.DataFrame(matrix, index=range(1, matrix.shape[0] + 1),
                          columns=range(1, matrix.shape[1] + 1))