将多个 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
我有大量 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