/ / El panel de pandas como una matriz multidimensional numpy - python, pandas, panel

Panel de pandas como matriz numérica numpy - python, pandas, panel

Soy nuevo con pandas. Intento hacer un ejemplo. Tengo una cuadrícula de puntos en tres dimensiones, la dimensión de la cuadrícula es N1 x N2 x N3. Cada punto de la cuadrícula contiene algunos datos (numpy.ndarray, float número, etc). Por ejemplo: en Point(0,0,0): "date" = 18, "temperature array" = numpy.array([[1,2,3], [4,5,6]]).

Ahora mi objetivo es crear una "tabla" de pandas (invito a un pandas.Panel) para que cuando llame table["date"][Point(0,0,0)], los resultados deben volver: 18 y cuando llamo table["temperature array"][Point(0,0,0)], vuelve numpy.array([[1,2,3], [4,5,6]]).

Si pudieras publicar un ejemplo simple, me ayudará muchísimo.

Gracias

Respuestas

1 para la respuesta № 1

Panel4D es probablemente lo que estás buscando. Básicamente, crea un índice multinivel desde tus primeras 3 dimensiones.

import pandas as pd
import numpy as np

# 100 x 100 x 100 x 3 array
data = np.random.randn(100,100,100,3)
data[0,0,0]
# out[]:
#     array([ 0.85284721, -0.04883839, -0.09375558])

table = pd.Panel4D(data)
table.ix[0,0,0]
# out[]:
#     minor
#     0    0.852847
#     1   -0.048838
#     2   -0.093756
#     Name: 0, dtype: float64

1 para la respuesta № 2

No he descubierto cómo almacenar una matriz numpyen una sola celda de un NDFrame de Pandas, y dudo que sea una buena idea, incluso si tuviera éxito. Los NDFrames de Pandas utilizan matrices NumPy para almacenar los datos subyacentes. Para almacenar una matriz NumPy como un valor dentro de una matriz NumPy, la matriz NumPy externa tendría que ser del tipo dtype, lo que evita que NumPy (y Pandas) apliquen rutinas numéricas rápidas a la matriz. Por lo tanto, anidar una matriz NumPy dentro de un NDFrame (como un Panel o DataFrame) perjudicaría el rendimiento.

En su lugar, podría usar un DataFrame con un MultiIndex:

import pandas as pd

index = pd.MultiIndex.from_tuples([(0,0,0),(0,0,1)])
table = pd.DataFrame([(18,1,2,3,4,5,6),
(19,10,20,30,40,50,60)], index=index,
columns=["date","t0","t1","t2","t3","t4","t5"])
print(table)
#        date  t0  t1  t2  t3  t4  t5
# 0 0 0    18   1   2   3   4   5   6
#     1    19  10  20  30  40  50  60

print(table.ix[(0,0,0),"date"])
# 18

print(table.ix[(0,0,1),"t0":"t5"].reshape(2,-1))
# [[10 20 30]
#  [40 50 60]]