158 votes

Ajout de méta-informations/métadonnées à pandas DataFrame

Est-il possible d'ajouter des méta-informations/métadonnées à un DataFrame pandas ?

Par exemple, le nom de l'instrument utilisé pour mesurer les données, l'instrument responsable, etc.

Une solution de rechange consisterait à créer une colonne contenant ces informations, mais il semble inutile de stocker un seul élément d'information dans chaque ligne !

111voto

unutbu Points 222216

Bien sûr, comme la plupart des objets Python, vous pouvez attacher de nouveaux attributs à une pandas.DataFrame :

import pandas as pd
df = pd.DataFrame([])
df.instrument_name = 'Binky'

Notez cependant que si vous pouvez attacher des attributs à un DataFrame, les opérations effectuées sur le DataFrame (telles que groupby , pivot , join o loc pour n'en citer que quelques-uns) peuvent renvoyer un nouveau DataFrame sans les métadonnées jointes. Pandas ne dispose pas encore d'une méthode robuste permettant de propagation de les métadonnées attachées aux DataFrames .

Préservation des métadonnées dans un fichier est possible. Vous pouvez trouver un exemple de la façon de stocker des métadonnées dans un fichier HDF5 aquí .

83voto

shootingstars Points 774

À partir de la version 1.0 de pandas, et peut-être même avant, il existe désormais une fonction Dataframe.attrs propriété. C'est expérimental, mais c'est probablement ce que vous voudrez à l'avenir. Par exemple :

import pandas as pd
df = pd.DataFrame([])
df.attrs['instrument_name'] = 'Binky'

Trouvez-le dans les docs aquí .

J'essaie de le faire avec to_parquet et ensuite from_parquet il ne semble pas persister, donc assurez-vous de vérifier cela avec votre cas d'utilisation.

15voto

follyroof Points 675

Je viens de rencontrer ce problème moi-même. Depuis pandas 0.13, les DataFrames ont un attribut _metadata qui persiste à travers les fonctions qui renvoient de nouveaux DataFrames. Il semble également survivre à la sérialisation sans problème (je n'ai essayé que json, mais j'imagine que hdf est également couvert).

14voto

Matti John Points 2734

Pas vraiment. Bien que vous puissiez ajouter des attributs contenant des métadonnées à la classe DataFrame comme le mentionne @unutbu, de nombreuses méthodes DataFrame renvoient un nouveau DataFrame, de sorte que vos métadonnées seraient perdues. Si vous avez besoin de manipuler votre dataframe, la meilleure option serait d'envelopper vos métadonnées et votre DataFrame dans une autre classe. Voir cette discussion sur GitHub : https://github.com/pydata/pandas/issues/2485

Il y a actuellement un demande de retrait pour ajouter un objet MetaDataFrame, qui supporterait mieux les métadonnées.

11voto

bscan Points 1472

La première réponse, qui consiste à attacher des attributs arbitraires à l'objet DataFrame, est bonne, mais si vous utilisez un dictionnaire, une liste ou un tuple, le système émettra une erreur du type "Pandas ne permet pas la création de colonnes via un nouveau nom d'attribut". La solution suivante fonctionne pour stocker des attributs arbitraires.

from types import SimpleNamespace
df = pd.DataFrame()
df.meta = SimpleNamespace()
df.meta.foo = [1,2,3]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X