【问题标题】:Fill pandas Panel object with data用数据填充熊猫面板对象
【发布时间】:2014-06-19 08:38:18
【问题描述】:

这可能是非常基本的,但我似乎无法在任何地方找到解决方案。我正在尝试在 pandas 中构建一个 3D 面板对象,然后用我从几个 csv 文件中读取的数据填充它。我正在尝试做的一个例子如下:

import numpy as np
import pandas as pd

year = np.arange(2000,2005)
obs = np.arange(1,5)
variables = ['x1','x2']

data = pd.Panel(items = obs, major_axis = year, minor_axis = variables)

所以data[i] 给了我属于面板中观察单元之一的所有数据:

data[1]
        x1      x2
2000    NaN     NaN
2001    NaN     NaN
2002    NaN     NaN
2003    NaN     NaN
2004    NaN     NaN

然后,我从 csv 读取数据,这给了我一个看起来像这样的 DataFrame(我只是在这里创建一个等效对象以使其成为一个工作示例):

x1data = pd.DataFrame(data = zip(year, np.random.randn(5)), columns = ['year', 'x1'])
x1data
    year    x1
0   2000    -0.261514
1   2001    0.474840
2   2002    0.021714
3   2003    -1.939358
4   2004    1.167545

不,我想用 x1data 数据框中的数据替换 data[1]x1 列中的 NaN。我的第一个想法(鉴于我来自 R)是简单地确保我从 x1data 中选择一个与面板中的 x1 列具有相同维度的对象并将其分配给面板:

data[1].x1 = x1data.x1

但是,这不起作用,我猜这是因为在 x1data 中,年份是数据框的一列,而在面板中,它们是显示在列左侧的任何内容( “行名”,这会是一个索引吗?

正如您可能从我的问题中看出的那样,我远未真正了解 pandas 数据结构中发生了什么,因此我们将不胜感激任何帮助!

【问题讨论】:

    标签: python pandas panel


    【解决方案1】:

    我猜这个问题并没有引起很多回复,因为它太愚蠢了,但以防万一有人遇到这个问题并且像我一样一无所知,非常简单的答案是访问面板使用.iloc 方法,如:

    data.iloc[item, major_axis, minor_axis]
    

    每个参数可以是单个元素或列表,以便在面板的切片上写入。我上面的问题本来可以解决的

    data.iloc[1, np.arange(2000,2005), 'x1'] = np.asarray(x1data.x1)
    

    data.iloc[1, year, 'x1'] = np.asarray(x1data.x1)
    

    请注意,如果我没有使用 np.asarray,则不会发生任何事情,因为 data.iloc[] 创建了一个以年份为索引的对象,而 x1data.x1 的索引从 0 开始。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-30
      • 1970-01-01
      • 2019-07-12
      • 2017-02-21
      相关资源
      最近更新 更多