如何遍历excel工作表和数据透视表。然后将它们附加到一个daraframe中

时间:2020-01-28 16:12:35

标签: python pandas dataframe unpivot melt

我有3张纸的Excel:毛额,保证金,收入。 他们每个人都有一个具有相同列和行标题的表。

我需要:

1)遍历每张工作表并保存到数据框中

2)取消透视每个数据框

3)将每个daraframe的值列附加到一个。

总价:

enter image description here

保证金:

enter image description here

收入:

enter image description here

结果应该是这样的:

enter image description here

如果我使用sheet_name=None,则会收到错误消息:

import pandas as pd
df = pd.read_excel('BudgetData.xlsx', sheet_name=None,index=False)
df_unpv = df.melt(id_vars=['Company'], var_name ='Month', value_name = 'Gross Revenue')
print(df_unpv)

我收到错误:

AttributeError                            Traceback (most recent call last)
<ipython-input-60-ee1791c449b1> in <module>
      1 import pandas as pd
      2 df = pd.read_excel('BudgetData.xlsx', sheet_name=None,index=False)
----> 3 df_unpv = df.melt(id_vars=['Company'], var_name ='Month', value_name = 'Gross Revenue')
      4 df_unpv
      5 

AttributeError: 'collections.OrderedDict' object has no attribute 'melt'

带有示例数据的Excel文件可在以下位置找到: https://www.dropbox.com/s/9dsnylng70t5a8i/Count%20Open%20and%20Closed%20at%20Point%20of%20time.pbix?dl=0

1 个答案:

答案 0 :(得分:1)

您正在尝试从.melt()对象调用df方法,而不是像docs这样从pd调用它:

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数:
frame:DataFrame id_vars:元组,列表或ndarray, 可选列用作标识符变量。

value_vars:元组,列表或ndarray,要取消透视的可选列。 如果未指定,则使用未设置为id_vars的所有列。

var_name:用于“变量”列的标量名称。如果没有 使用frame.columns.name或“变量”。

value_name:标量,默认为“ value”,用于“ value”的名称 列。

col_level:int或字符串,可选,如果列是MultiIndex,则 用这个水平融化。