python - 用数据填充 pandas Panel 对象

标签 python pandas panel

这可能是非常非常基本的,但我似乎无法在任何地方找到解决方案。我正在尝试在 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

否,我想将 data[1]x1 列中的 NaN 替换为 x1data 数据帧中的数据。我的第一个想法(假设我来自 R)是简单地确保从 x1data 中选择一个与面板中的 x1 列具有相同尺寸的对象并将其分配给面板:

data[1].x1 = x1data.x1

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

正如您可能从我的问题中看出的那样,我还远远没有真正理解 pandas 数据结构中发生的情况,因此我们将不胜感激任何帮助!

最佳答案

我猜这个问题并没有引起很多回复,因为它太愚蠢了,但以防万一有人遇到这个问题并且像我一样一无所知,非常简单的答案是访问面板使用 .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 开始。

关于python - 用数据填充 pandas Panel 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23431900/

相关文章:

python - 如何使用本地计算机中的python脚本访问远程服务器(ubuntu)中的sqlite数据库文件

python - django-environ DATABASE_URL 格式

Python pandas 计算 15 分钟内的平均价格

python - 将一个文件的代码应用到多个文件python(新手问题)

java - 如何自动滚动文本区域而不增加其大小

r - 如何针对某些特定值对面板数据回归系数执行联合 Wald 检验?

python - 检查一个列表中的任何元素是否在另一个列表中

python - 如何将 Python 数据框类型 float64 列拆分为多列

python - 在 Pandas 数据框中拆分字符串

javascript - html中的可最小化侧面板