Stocker les tableaux multidimensionnels dans les pandas DataFrame colonnes
Je suis l'espoir d'utiliser les pandas comme la principale Trace (série de points dans l'espace des paramètres de MCMC) de l'objet.
J'ai une liste des dicts de la chaîne->array que je voudrais stocker dans des pandas. Les clés dans les dicts sont toujours les mêmes, et pour chaque clé de la forme du tableau numpy est toujours le même, mais la forme peut être différente pour différents clés et peut avoir un nombre différent de dimensions.
J'avais été en utilisant self.append(dict_list, ignore_index = True)
qui semble bien fonctionner pour les 1d valeurs, mais pour nd>1 valeurs pandas stocke les valeurs des objets qui ne permet pas de nice complot et d'autres belles choses. Toutes les suggestions sur la façon d'obtenir un meilleur comportement?
Des données de l'échantillon
point = {'x': array(-0.47652306228698005),
'y': array([[-0.41809043],
[ 0.48407823]])}
points = 10 * [ point]
J'aimerais être capable de faire quelque chose comme
df = DataFrame(points)
ou
df = DataFrame()
df.append(points, ignore_index=True)
et ont
>> df['x'][1].shape
()
>> df['y'][1].shape
(2,1)
Peut-on avoir des exemples de données pour votre problème?
Certes, j'ai ajouté un peu au-dessus. Est-ce que c'est? Ou aimeriez-vous quelque chose de plus?
Essayez
MultiIndex
: stackoverflow.com/a/37742328/911945OriginalL'auteur John Salvatier | 2013-04-04
Vous devez vous connecter pour publier un commentaire.
Relativement nouvelle bibliothèque xray[1] a
Dataset
etDataArray
structures qui font exactement ce que vous demandez.Ici, c'est mon point de vue sur votre problème, écrit comme un IPython session:
Ce sont les deux
DataArray
cas, nous avons construit jusqu'à présent:Nous pouvons maintenant fusionner ces deux
DataArray
sur leur communex
dimension enDataSet
:Et nous pouvons enfin accès et d'agrégation de données comme vous le souhaitez:
[1] Une bibliothèque pour la manipulation N-dimensionnelle de données avec des étiquettes, comme les pandas ne pour la 2D: http://xray.readthedocs.org/en/stable/data-structures.html#dataset
OriginalL'auteur ankostis
Elle va un peu à l'encontre des Pandas de la philosophie, qui semble voir
Series
comme une dimension des données de la structure. Par conséquent, vous devez créer laSeries
à la main, dites-leur qu'ils ont le type de données"object"
. Cela signifie ne pas appliquer automatiquement les conversions de données.Vous pouvez le faire comme ceci (réorganisées Ipython session):
est droit!
OriginalL'auteur Eike
Combinant @Eike de réponse et @JohnSalvatier commentaire semble assez Pandasonic:
À l'intrigue (et les autres frais 2-D Pandas choses), vous avez encore de convertir manuellement la colonne des tableaux de retour à un DataFrame:
De les stocker sur le disque, utilisez
to_pickle
:Si vous utilisez
to_csv
votrenp.array
s deviennent des cordes:OriginalL'auteur hobs