kon*_*tin 5 python numpy pandas
我有一个numpy数组大小31x36,我想转换成pandas数据帧,以便处理它.我试图使用以下代码转换它:
pd.DataFrame(data=matrix,
index=np.array(range(1, 31)),
columns=np.array(range(1, 36)))
Run Code Online (Sandbox Code Playgroud)
但是,我收到以下错误:
ValueError:传递值的形状是(36,31),索引暗示(35,30)
如何解决问题并正确转换?
至于您尝试失败的原因,范围相差 1
pd.DataFrame(data=matrix,
index=np.array(range(1, 32)),
columns=np.array(range(1, 37)))
Run Code Online (Sandbox Code Playgroud)
由于最后一个值不包含在范围内
实际上,看看你在做什么,你本可以做的:
pd.DataFrame(data=matrix,
index=np.arange(1, 32)),
columns=np.arange(1, 37)))
Run Code Online (Sandbox Code Playgroud)
或者纯pandas:
pd.DataFrame(data=matrix,
index=pd.RangeIndex(range(1, 32)),
columns=pd.RangeIndex(range(1, 37)))
Run Code Online (Sandbox Code Playgroud)
此外,如果您不指定索引和列参数,则会生成一个自动生成的索引和列,它们将从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
Run Code Online (Sandbox Code Playgroud)
您遇到错误,因为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]))
Run Code Online (Sandbox Code Playgroud)
如果需要从 开始1,记得加 1:
df = pd.DataFrame(matrix, index=range(1, matrix.shape[0] + 1),
columns=range(1, matrix.shape[1] + 1))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
24746 次 |
| 最近记录: |