2014-05-02 12 views
5

Desidero inserire i seguenti dati nei panda per ulteriori analisi.inserimento di dati ndarray in panda

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 

Ma verifica il seguente errore:

Exception: Data must be 1-dimensional 

Qual è il buon modo di farlo? La mia ulteriore analisi è quella di riempire i valori np.nan per interpolazione con metodo cubico o polinomiale e produrre il risultato come array numpy.

+0

Utilizzare un DataFrame per dati multidimensionali, non una serie. – Ffisegydd

+0

@Ffisegydd sembra che 'DataFrame' accetta solo array 2-D ... –

+0

@neha hai davvero bisogno di passare un array 3D a Panda? –

risposta

2

sulla base di osservazioni è possibile ottenere ciò che si vuole, se si rimodellare data, interpolare con il metodo DataFrame.interpolate() e poi ritorno la matrice al suo valore originale. Funziona per panda 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

Provare a utilizzare un pannello:

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 

E ...

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

Non che 'interpolate' non sia implementato su Panels iirc, che era la necessità originale dell'OP. Probabilmente dovrai eseguire iterazioni sugli elementi del pannello. – TomAugspurger

+0

@TomAugspurger o forse nested 'apply' 0_o –

Problemi correlati