将numpy ndarray数据放入pandas中

5 投票
2 回答
4741 浏览
提问于 2025-04-18 05:09

我想把以下数据放进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数组。

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
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)

撰写回答