2014-05-02 15 views
5

Chcę umieścić następujące dane w pandach do dalszej analizy.Umieszczanie numdowych danych ndarray w pandach

import numpy as np 
import pandas as pd 
from pandas import DataFrame 

data = np.array([[[1, 1, 1, np.nan, 1], [np.nan, 1, 1, 1, 1]], 
       [[2, np.nan, 2, 2, 2], [2, np.nan, 2, 2, 2]], 
       [[3, 3, 3, np.nan, 3], [3, 3, 3, 3, np.nan]]]) 

pnda = pd.Series(data) 

print pnda 

Ale pojawia się następujący błąd:

Exception: Data must be 1-dimensional 

Jaki jest dobry sposób to zrobić? Moja dalsza analiza polega na wypełnieniu wartości np.nan przez interpolację za pomocą metody sześciennej lub wielomianowej i wyprowadzenie wyniku w postaci tablicy numpy.

+0

Użyj DataFrame dla danych wielowymiarowych, a nie dla serii. – Ffisegydd

+0

@Ffisegydd wydaje się, że 'DataFrame' akceptuje tylko tablice 2-D ... –

+0

@neha czy naprawdę musisz przekazać tablicę 3-D do Pandy? –

Odpowiedz

2

oparciu o komentarze można osiągnąć to, co chcesz, jeśli zmienią data, interpolacji przy użyciu metody DataFrame.interpolate() a następnie powrót tablica do pierwotnej wartości. Działa dla pandy 0.13.1.

df = pd.DataFrame(data.reshape(2, -1)) 
df.interpolate(axis=1).values.reshape(data.shape) 
#array([[[1, 1, 1, 1, 1], 
#  [1, 1, 1, 1, 1]], 
# 
#  [[2, 2, 2, 2, 2], 
#  [2, 2, 2, 2, 2]], 
# 
#  [[3, 3, 3, 3, 3], 
#  [3, 3, 3, 3, 3]]], dtype=int64) 
3

Spróbuj użyć panelu:

import numpy as np 
import pandas as pd 

data = np.array([[[1, 1, 1, np.nan, 1], [np.nan, 1, 1, 1, 1]], 
       [[2, np.nan, 2, 2, 2], [2, np.nan, 2, 2, 2]], 
       [[3, 3, 3, np.nan, 3], [3, 3, 3, 3, np.nan]]]) 

x = pd.Panel(data) 
x 

<class 'pandas.core.panel.Panel'> 
Dimensions: 3 (items) x 2 (major_axis) x 5 (minor_axis) 
Items axis: 0 to 2 
Major_axis axis: 0 to 1 
Minor_axis axis: 0 to 4 

I ...

print(x.loc[0]) 
    0 1 2 3 4 
0 1 1 1 NaN 1 
1 NaN 1 1 1 1 
+0

Nie oznacza to, że interpolacja nie jest zaimplementowana w Panels iirc, co było pierwotną potrzebą PO. Prawdopodobnie będziesz musiał powtórzyć elementy panelu. – TomAugspurger

+0

@TomAugspurger lub być zagnieżdżonym 'zastosować' 0_o –