将numpy的ndarray数据放入pandas中

5
我想将以下数据放入pandas进行进一步分析。
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

但是出现了以下错误:
Exception: Data must be 1-dimensional

怎样做才是好的?我的进一步分析是使用三次或多项式插值法填充np.nan值,并将结果输出为numpy数组。


使用DataFrame来处理多维数据,而不是Series。 - Ffisegydd
@Ffisegydd 看起来 DataFrame 只接受 2-D 数组... - Saullo G. P. Castro
@neha 你真的需要将一个三维数组传递给Pandas吗? - Saullo G. P. Castro
啊,是的,抱歉。我认为使用DataFrames比Series更合适(Series通常是一个一维的“数组”),但是我不知道如何处理大于N的ND数组。 - Ffisegydd
2D数组填充的相关信息请参考http://pandas.pydata.org/pandas-docs/stable/missing_data.html。 - user3235542
显示剩余7条评论
2个回答

3
尝试使用面板:
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

并且...

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

请注意,如果我没记错的话,interpolate 在面板上并没有实现,这是 OP 最初的需求。您可能需要迭代面板中的项目。 - TomAugspurger
@TomAugspurger 或许是一个嵌套的 apply 0_o - Paul H

2

根据您的评论,如果您重新调整data、使用DataFrame.interpolate()方法进行插值,然后将数组返回到原始值,您可以实现所需的功能。 这适用于pandas 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)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接