gpt4 book ai didi

python - 用数据填充 pandas Panel 对象

转载 作者:太空宇宙 更新时间:2023-11-04 03:46:41 25 4
gpt4 key购买 nike

这可能是非常非常基本的,但我似乎无法在任何地方找到解决方案。我正在尝试在 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 数据结构中发生的事情,因此我们将不胜感激任何帮助!

最佳答案

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com