Импорт из Excel в Python Pandas и перестановка заголовка метаданных в виде данных столбца - PullRequest
2 голосов
/ 06 марта 2020

Я пытаюсь импортировать данные из Excel в Pandas, но у меня возникают проблемы с перестановкой meatadata.

Лист Excel имеет формат (упрощенный здесь): Исходные данные

Но я бы хотел импортировать лист Excel в Pandas фрейм данных, а затем переупорядочить его в этом формате, чтобы упростить статистическое построение в Pandas: Конечные данные

Я попробовал следующий метод, но не могу найти правильный формат:

import numpy as np
import pandas as pd
FNAME = 'Original.xlsx'
df = pd.read_excel(FNAME, sheet_name='Sheet1', header = [0,1,2,3])
mi = pd.MultiIndex.from_frame(df)
dfmi = pd.melt(df, id_vars=[mi.names[0]])
# Add column index
col = list(mi.names[0])
col.insert(0,'temp')
col.append('value')
col[-2]='type'
dfmi.columns = col

df
Out[17]: 
                   A     a1                                     
                   B     b1                    b2               
                   C     c1                    c2               
  Unnamed: 0_level_3 Data 1 Data 2  Data 3 Data 1 Data 2  Data 3
0                NaN      1      7      13      4     10      16
1                NaN      2      8      14      5     11      17
2                NaN      3      9      15      6     12      18

dfmi
Out[18]: 
    temp   A   B   C     type  value
0    NaN  a1  b1  c1   Data 1      1
1    NaN  a1  b1  c1   Data 1      2
2    NaN  a1  b1  c1   Data 1      3
3    NaN  a1  b1  c1   Data 2      7
4    NaN  a1  b1  c1   Data 2      8
5    NaN  a1  b1  c1   Data 2      9
6    NaN  a1  b1  c1   Data 3     13
7    NaN  a1  b1  c1   Data 3     14
8    NaN  a1  b1  c1   Data 3     15
9    NaN  a1  b2  c2   Data 1      4
10   NaN  a1  b2  c2   Data 1      5
11   NaN  a1  b2  c2   Data 1      6
12   NaN  a1  b2  c2   Data 2     10
13   NaN  a1  b2  c2   Data 2     11
14   NaN  a1  b2  c2   Data 2     12
15   NaN  a1  b2  c2   Data 3     16
16   NaN  a1  b2  c2   Data 3     17
17   NaN  a1  b2  c2   Data 3     18

Мой предпочтительный формат Pandas будет:

    A   B   C  Data 1  Data 2  Data 3
0  a1  b1  c1       1       7      13
1  a1  b1  c1       2       8      14
2  a1  b1  c1       3       9      15
3  a1  b2  c2       4      10      16
4  a1  b2  c2       5      11      17
5  a1  b2  c2       6      12      18

Но значения в dfmi не укладываются только в один столбец, я хотел бы сохранить три столбца данных. Существуют ли другие способы получения моего предпочтительного формата данных?

Ссылка на файл Excel: Файл Excel Исходные данные

1 Ответ

1 голос
/ 06 марта 2020

Протестировано со связанными данными - добавьте index_col=0 для преобразования первого столбца в индекс, затем создайте индекс по умолчанию для DataFrame.reset_index и drop=True:

FNAME = 'Original.xlsx'
df = pd.read_excel(FNAME, 
                  sheet_name='Sheet1', 
                  header = [0,1,2,3], 
                  index_col=[0]).reset_index(drop=True)

Возможно изменение формы на DataFrame.unstack, Series.unstack, затем удалите четвертый уровень и преобразуйте все остальные уровни в столбцы на DataFrame.reset_index:

df = df.unstack().unstack(3).reset_index(level=3, drop=True).reset_index()
print (df)
    A   B   C   Data 3  Data 1  Data 2
0  a1  b1  c1       13       1       7
1  a1  b1  c1       14       2       8
2  a1  b1  c1       15       3       9
3  a1  b2  c2       16       4      10
4  a1  b2  c2       17       5      11
5  a1  b2  c2       18       6      12

Порядок столбцов различен, потому что Data 3 в данных образца имеет пробел в конце - ' Data 3'

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...