将多个 DataFrame 转换为一个 Panel

Converting multiple DataFrames into a Panel

我有大量 excel 文件。这些文件中的每一个都包含一个或多个变量所有受试者在某个时间点。对于每个变量,我有 10 个文件(存储变量在 10 个不同时间点的值)。我的最终目标是建立一个面板系列。

假设每个文件中只有一个变量。对于每个变量(或项),我初始化一个空的 DataFrame item = pd.DataFrame(),然后连续读取所有 10 个文件并将其附加到该空的 DataFrame item = item.append(pd.DataFrame(df)),其中 df 来自新文件。这 10 个数据帧中的每一个都有维度 1 x #subjects,因此我最终有 10 x #subject。我使用 pf = pd.Panel({'variable name': item}) 将它变成面板框架。现在,我可以轻松地将它添加到包含许多其他项目的大面板框架中...

问题:如果我在每个文件中有 2 个或更多变量,解决这个问题的简单实用的方法是什么?如果我坚持上述方法,每个文件都会有一个维度为 #variables x #subjects 的 DataFrame,从而导致

                 subject1    subject2
variable1 2000        val         val
variable2 2000        val         val
variable1 2001        val         val
variable2 2001        val         val
...

添加它们之后。这显然是将其转换为面板数据的错误结构。

我可以自己解决 - 例如通过附加到 "the correct line" 以保持适当的结构或多次读取同一个文件,因为它有变量 - 但这会很麻烦 and/or 代价高昂。必须有一些方法可以轻松完成这项工作,但我在文档中找不到它们。

感谢您的帮助。

一个Panel本质上是一堆DataFrame对象,允许在三个维度上探索数据。因此,每个文件中代表多少变量或主题并不重要,只要每个文件只代表一个时间点即可。将每个文件导入 DataFrame,然后创建您的 Panel

这可以通过在文件名列表上使用 for 循环来实现。在循环中,您可以检查数据来自哪一年,并将结果与​​所有其他 DataFrame 对象一起存储在字典中,从而使您可以轻松地将数据框字典转换为面板。

如果您的原始 DataFrame 格式类似于:

      Gerald  Kate
Var1       1     5
Var2       2     6
Var3       3     7
Var4       4     8

然后你可以创建你的 Panel 像这样:

pn=pd.Panel(data={2010:df2010, 2015:df2015, 2020:df2020})

这会产生一个 Panel,其属性为:

Dimensions: 3 (items) x 4 (major_axis) x 2 (minor_axis)
Items axis: 2010 to 2020
Major_axis axis: Var1 to Var4
Minor_axis axis: Gerald to Kate

可以按年份切片:

print(pn[2015])


      Gerald  Kate
Var1       3    15
Var2       6    18
Var3       9    21
Var4      12    24

也可以切换轴以更好地查看单个变量或主题:

print(pn.transpose('minor_axis','major_axis','items')['Gerald'])

      2010  2015  2020
Var1     1     3     9
Var2     2     6    18
Var3     3     9    27
Var4     4    12    36