Как перебирать листы Excel и разворачивать кадры данных. Затем добавьте их вместе в один daraframe - PullRequest
0 голосов
/ 28 января 2020

У меня Excel с 3 листами: валовой, маржа, доход. У каждого из них есть таблица с одинаковыми столбцами и заголовками строк.

Мне нужно:

1) перебрать каждый лист и сохранить в фрейме данных

2) развинтить каждый фрейм данных

3) добавить столбцы значений из каждый кадр в один.

Брутто:

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 Ответ

1 голос
/ 28 января 2020

Вы пытаетесь вызвать метод .melt() из вашего объекта df вместо вызова его из 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: scalar Name для использования в столбце 'variable'. Если None, он использует frame.columns.name или «variable».

value_name: scalar, имя по умолчанию «value» Имя для использования в столбце «value».

col_level: int или string, необязательный Если столбцы являются MultiIndex, используйте этот уровень для плавления.

...