J'ai un tableau numpy de taille 31x36
et je souhaite me transformer en pandas dataframe afin de le traiter. J'essaye de le convertir en utilisant le code suivant:
pd.DataFrame(data=matrix,
index=np.array(range(1, 31)),
columns=np.array(range(1, 36)))
Cependant, je reçois l'erreur suivante:
ValueError: la forme des valeurs transmises est (36, 31), les indices impliquent (35, 30)
Comment puis-je résoudre le problème et le transformer correctement?
Quant à pourquoi ce que vous avez essayé a échoué, les plages sont désactivées de 1
pd.DataFrame(data=matrix,
index=np.array(range(1, 32)),
columns=np.array(range(1, 37)))
Comme la dernière valeur n'est pas incluse dans la plage
En fait, en regardant ce que vous faites, vous auriez pu faire:
pd.DataFrame(data=matrix,
index=np.arange(1, 32)),
columns=np.arange(1, 37)))
Ou en pure pandas
:
pd.DataFrame(data=matrix,
index=pd.RangeIndex(range(1, 32)),
columns=pd.RangeIndex(range(1, 37)))
De même, si vous ne spécifiez pas les paramètres d'index et de colonne, un index et des colonnes générés automatiquement sont générés à partir de 0
. Vous ne savez pas pourquoi vous avez besoin d'eux pour commencer à partir de 1
Vous pourriez également ne pas avoir passé les paramètres index et column et simplement les modifier après la construction:
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
En plus de la réponse ci-dessus, range(1, X)
décrit l'ensemble des nombres allant de 1
à X-1
inclus. Vous devez utiliser range(1, 32)
et range(1, 37)
pour faire ce que vous décrivez.
Vous rencontrez une erreur car l'argument end
dans range(start, end)
est non inclusif . Vous avez plusieurs options à prendre en compte pour cela:
Utilisez simplement df = pd.DataFrame(matrix)
. Le constructeur pd.DataFrame
ajoute implicitement des indices entiers.
matrix.shape
donne un nuplet de nombre de lignes et de colonnes, vous n'avez donc pas besoin de les spécifier manuellement. Par exemple:
df = pd.DataFrame(matrix, index=range(matrix.shape[0]),
columns=range(matrix.shape[1]))
Si vous devez commencer par 1
, n'oubliez pas d'ajouter 1:
df = pd.DataFrame(matrix, index=range(1, matrix.shape[0] + 1),
columns=range(1, matrix.shape[1] + 1))