L'indice de pandas DataFrame par les numéros de colonne, lorsque les noms de colonne sont des entiers
J'essaie de garder seulement certaines colonnes d'un DataFrame, et il fonctionne très bien lorsque les noms de colonne sont des chaînes de caractères:
In [2]: import numpy as np
In [3]: import pandas as pd
In [4]: a = np.arange(35).reshape(5,7)
In [5]: df = pd.DataFrame(a, ['x', 'y', 'u', 'z', 'w'], ['a', 'b', 'c', 'd', 'e', 'f', 'g'])
In [6]: df
Out[6]:
a b c d e f g
x 0 1 2 3 4 5 6
y 7 8 9 10 11 12 13
u 14 15 16 17 18 19 20
z 21 22 23 24 25 26 27
w 28 29 30 31 32 33 34
[5 rows x 7 columns]
In [7]: df[[1,3]] #No problem
Out[7]:
b d
x 1 3
y 8 10
u 15 17
z 22 24
w 29 31
Toutefois, lorsque les noms de colonne sont des nombres entiers, j'obtiens une erreur de clé:
In [8]: df = pd.DataFrame(a, ['x', 'y', 'u', 'z', 'w'], range(10, 17))
In [9]: df
Out[9]:
10 11 12 13 14 15 16
x 0 1 2 3 4 5 6
y 7 8 9 10 11 12 13
u 14 15 16 17 18 19 20
z 21 22 23 24 25 26 27
w 28 29 30 31 32 33 34
[5 rows x 7 columns]
In [10]: df[[1,3]]
Résultats dans:
KeyError: '[1 3] not in index'
Je peux voir pourquoi les pandas ne permet pas que l' -> afin d'éviter toute confusion entre l'indexation par les noms de colonnes et les numéros de colonne. Cependant, il est un moyen de raconter des pandas que je veux index par numéro de colonne? Bien sûr, la seule solution est de convertir les noms de colonnes à cordes, mais je me demande si il y a une meilleure solution.
Vous devez vous connecter pour publier un commentaire.
C'est exactement le but de lci, voir ici
C'est certainement l'une de ces choses qui se sent comme un bug mais c'est vraiment une décision de conception (je pense).
Un peu de travail autour des options:
renommer les colonnes avec leurs positions comme leur nom l':
Une autre façon est de prendre les noms de
df.columns
:Je suppose que c'est la plus attrayante qu'il faut juste ajouter un petit peu de code et de ne pas changer de nom de colonne.