用d填充pandas面板对象

2024-05-16 11:26:38 发布

您现在位置:Python中文网/ 问答频道 /正文

这可能是非常基本的,但我似乎找不到任何解决办法。我试图在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]给出了属于面板中某个观测单元的所有数据:

^{pr2}$

然后,我从一个csv中读取数据,这个csv给了我一个如下所示的数据帧(我只是在这里创建一个等效的对象,使其成为一个有效的示例):

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 dataframe中的数据替换x1列中的NaN。我的第一个想法(假设我来自R)是简单地确保从x1data中选择一个与面板中x1列具有相同维度的对象并将其分配给面板:

data[1].x1 = x1data.x1

但是,这不起作用,我想这是因为在x1data中,年份是dataframe的一列,而在面板中,年份是列左侧显示的内容(“行名称”,这是索引吗)?在

正如你可能从我的问题中可以看出的那样,我还远没有真正理解熊猫数据结构中发生了什么,所以任何帮助都将不胜感激!在


Tags: csv数据对象import面板pandasdataas
1条回答
网友
1楼 · 发布于 2024-05-16 11:26:38

我猜这个问题并没有引起太多的回答,因为它太蠢了,但是为了防止有人碰到这个问题,像我一样不知所措,最简单的答案是使用.iloc方法访问面板,如下所示:

data.iloc[item, major_axis, minor_axis]

其中每个参数可以是单个元素或列表,以便在面板的切片上写入。我上面的问题可以通过

^{pr2}$

或者

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

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

相关问题 更多 >