Obtenir la liste de pandas DataFrame en-têtes de colonne
Je veux obtenir une liste des en-têtes de colonne à partir d'une pandas DataFrame. Le DataFrame viendra de la saisie de l'utilisateur de sorte que je ne sais pas combien de colonnes il y aura ou qu'ils seront appelés.
Par exemple, si je me suis donné un DataFrame comme ceci:
>>> my_dataframe
y gdp cap
0 1 2 5
1 2 3 9
2 8 7 2
3 3 4 7
4 6 7 7
5 4 8 3
6 8 2 8
7 9 9 10
8 6 6 4
9 10 10 7
Je voudrais obtenir une liste comme ceci:
>>> header_list
['y', 'gdp', 'cap']
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir les valeurs d'une liste par:
Aussi, vous pouvez simplement utiliser: (comme indiqué dans Ed Chum répondre):
columns
comme un attribut?df.column_names()
. Est-ce la réponse juste ou est-il obsolète?array(['colBoolean','colTinyint', 'colSmallnt', ...], dtype=object)
df.keys().tolist()
est plus universelle, car elle fonctionne aussi pour les anciennes versions de pandas que 0.16.0.tolist()
méthode au lieu de cela, il est plus rapide et plus idiomatique.Il y a une méthode intégrée qui est le plus performant:
.columns
retourne un Index,.columns.values
retourne un tableau, ce qui a une fonction d'assistance.tolist
de revenir une liste.Si la performance n'est pas aussi important pour vous,
Index
objets de définir un.tolist()
méthode que vous pouvez appeler directement:La différence de performance est évidente:
Pour ceux qui détestent tapant, vous pouvez les appeler
list
surdf
, de la manière suivante:DataFrame
itérable n'a pas changé depuis le premier jour: pandas.pydata.org/pandas-docs/stable/basics.html#iteration. L'objet iterable retourné à partir d'un DataFrame a toujours été des colonnes afin de fairefor col in df:
doit toujours se comporter de la même sauf que les développeurs ont un effondrement de sortelist(df)
est et devrait toujours être une méthode valable. Notez quedf.keys()
est l'appel à la mise en œuvre interne de la dict-comme la structure remettre les clés, qui sont les colonnes. Inexplicable downvotes est la garantie des dommages attendus sur DONC ne vous inquiétez pascolumns
attribut. Il ya une heure, j'ai lu au sujet de la Loi de Déméter promotion que l'appelant ne devrait pas dépendre de la navigation à l'intérieur du modèle objet.list(df)
fait une conversion de type explicite. Secondaires notables: en effet, les temps d'exécution et la mémoire de l'augmentation de la consommation avec dataframe tailledf.keys()
méthode fait partie de la dict-comme la nature d'unDataFrame
. Notables fait: temps d'exécution pourdf.keys()
est plutôt constant indépendamment de la dataframe de la taille de la partie de la responsabilité des pandas développeurs.df.columns.tolist()
le même quedf.columns.values.tolist()
? l'appel de.values
se désintègre ànumpy
ce qui explique pourquoi il a été plus rapide à l'origineFait quelques tests rapides, et peut-être sans surprise, la version intégrée à l'aide de
dataframe.columns.values.tolist()
est la plus rapide:(Je n'aime vraiment le
list(dataframe)
bien, donc merci EdChum!)Son est encore plus simple (par les pandas 0.16.0) :
vous donnera les noms de colonne dans une belle liste.
À la liste des colonnes d'un dataframe tout en mode débogage, utilisez une compréhension de liste:
Par la manière, vous pouvez obtenir une liste triée en utilisant simplement
sorted
:list(df)
de travailler uniquement avec les autoincrement dataframes? Ou faut-il travailler pour tous les dataframes?[c for c in df]
.Qui est disponible sous
my_dataframe.columns
.header_list = list(my_dataframe.columns)
df.columns.tolist()
.C'est intéressant mais
df.columns.values.tolist()
est presque 3 fois plus rapide quedf.columns.tolist()
mais je pense qu'ils sont les mêmes:.values
retourne le sous-jacent tableau numpy, et de faire quelque chose avec numpy est presque toujours plus rapide que de faire la même chose avec les pandas directement.Surpris, je n'ai pas vu cette posté jusqu'à présent, donc je vais juste laisser ça ici.
Étendu Itérable Déballage (python3.5+):
[*df]
et AmisDéballage des généralisations (PEP 448) ont été introduites avec Python 3.5. Ainsi, les opérations suivantes sont possibles.
Si vous voulez un
list
....Ou, si vous voulez un
set
,Ou, si vous voulez un
tuple
,Ou, si vous voulez stocker le résultat quelque part,
... si vous êtes le genre de personne qui se convertit à café à la saisie des sons, et bien, cela va consommer votre café de manière plus efficace 😉
Contrôle Visuel
Depuis que j'ai vu cette discussion dans d'autres réponses, vous pouvez utiliser l'objet iterable déballage (pas besoin d'explicite dans les boucles).
Critique des Autres Méthodes
N'utilisez pas explicite
for
boucle pour une opération qui peut être fait en une seule ligne (interprétations de la Liste sont d'accord).Ensuite, à l'aide
sorted(df)
ne conserve pas l'ordre original des colonnes. Pour cela, vous devez utiliserlist(df)
à la place.Prochaine,
list(df.columns)
etlist(df.columns.values)
sont mauvaises suggestions (à compter de la version actuelle, v0.24). Les deuxIndex
(renvoyée à partir dedf.columns
) et des tableaux NumPy (retourné par ladf.columns.values
) définir.tolist()
méthode qui est plus rapide et plus idiomatique.Enfin, listification c'est à dire,
list(df)
ne doit être utilisé comme un concis alternative aux méthodes mentionnées ci-dessus.Un DataFrame suit le dict-comme la convention de parcourir les “clés” des objets.
Créer une liste de clés/colonnes - méthode de l'objet
to_list()
et pythonic façonDe base itération sur un DataFrame retourne étiquettes de colonne
Ne pas convertir un DataFrame dans une liste, juste pour obtenir les étiquettes de colonne. N'arrêtez pas de penser lors de la recherche pour la pratique des exemples de code.
df.columns
est beaucoup plus rapide quedf.keys()
. Je ne sais pas pourquoi ils ont à la fois une fonction et l'attribut pour la même chose (enfin, ce n'est pas la première fois que je l'ai vu 10 façons différentes de faire quelque chose dans les pandas).Dans le Cahier
Pour l'exploration de données dans le IPython notebook, mon manière préférée est: est-ce
Qui va produire un facile à lire par ordre alphabétique de la liste.
Dans un référentiel de code
Dans le code je le trouve plus explicite pour ne
Car il dit à d'autres la lecture de votre code ce que vous faites.
sorted(df)
de modifier l'ordre. À utiliser avec prudence.comme répondu par Siméon Visser...vous pourriez faire
ou
Mais je pense que la plupart le sweet spot est:
Il est explicite, en même temps pas trop long.
list
n'a aucun mérite sauf si vous êtes en l'appelant surdf
directement (par exemple, concision). Accéder à la.columns
attribut renvoie unIndex
objet qui a unetolist()
méthode définie sur elle, et la vocation qui est la plus idiomatique que listifying laIndex
. Le mélange des idiomes juste pour le plaisir de l'exhaustivité n'est pas une bonne idée. En va de même pour listifying le tableau que vous obtenez à partir.values
.Pour un rapide, soigné, contrôle visuel, essayez ceci:
Cela nous donne les noms de colonnes dans une liste:
Une autre fonction appelée tolist() peut être utilisée aussi:
Je sens la question mérite d'explication supplémentaire.
Comme @fixxxer noté, la réponse dépend des pandas version que vous utilisez dans votre projet.
Que vous pouvez obtenir avec
pd.__version__
commande.Si vous êtes pour une raison quelconque, comme moi (sur debian jessie-je utiliser 0.14.1) utilisez une version plus ancienne de pandas que 0.16.0, alors vous devez utiliser:
df.keys().tolist()
car il n'est pasdf.columns
méthode encore mis en œuvre.L'avantage de cette méthode de clés, c'est qu'elle fonctionne même dans la version la plus récente de pandas, de sorte qu'il est plus universel.
[n for n in dataframe.columns]
Même si la solution qui a été prévu ci-dessus est agréable. Je voudrais également s'attendre à quelque chose comme cadre.column_names() est une fonction dans les pandas, mais comme il n'est pas, peut-être qu'il serait bien d'utiliser la syntaxe suivante. C'est en quelque sorte préserve le sentiment que vous êtes à l'aide de pandas, de manière adéquate, par l'appel de la "tolist" la fonction de l'image.les colonnes.tolist()
Cette solution de listes de toutes les colonnes de votre objet my_dataframe: