Python 将numpy数组转换为数据帧

Python 将numpy数组转换为数据帧,python,pandas,numpy,Python,Pandas,Numpy,我有一个大小为31x36的numpy数组,我想转换成pandas dataframe来处理它。我正在尝试使用以下代码对其进行转换: pd.DataFrame(data=matrix, index=np.array(range(1, 31)), columns=np.array(range(1, 36))) 但是,我收到以下错误: ValueError:传递值的形状为(36,31),索引暗示为(35,30) 如何解决问题并正确转换?至于您尝试失败的原因,范

我有一个大小为31x36的numpy数组,我想转换成pandas dataframe来处理它。我正在尝试使用以下代码对其进行转换:

pd.DataFrame(data=matrix,
          index=np.array(range(1, 31)),
          columns=np.array(range(1, 36)))
但是,我收到以下错误:

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


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

至于您尝试失败的原因,范围为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)))
或者在纯
熊猫中

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,X)
描述了从
1
X-1(含)的一组数字。您需要使用
范围(1,32)
范围(1,37)
来执行您所描述的操作。

您会遇到错误,因为
范围(开始,结束)
中的
结束
参数不包含在内。对此,您有两种选择:

不传递索引和列 只需使用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))

有什么评论吗?直接使用
matrix
属性是这里的自然解决方案。
pd.DataFrame(matrix)
会起作用,不是吗?要使用自定义索引,这是另一个选项:
pd.DataFrame(arr).rename(index=lambda x:x+1,columns=lambda x:x+1)