我有3张纸的Excel:毛额,保证金,收入。 他们每个人都有一个具有相同列和行标题的表。
我需要:
1)遍历每张工作表并保存到数据框中
2)取消透视每个数据框
3)将每个daraframe的值列附加到一个。
总价:
保证金:
收入:
结果应该是这样的:
如果我使用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
答案 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,则 用这个水平融化。