【发布时间】: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 数据结构中发生了什么,因此我们将不胜感激任何帮助!
【问题讨论】: