开发者社区> 问答> 正文

在Python Pandas中从Excel导入并将元数据标题重新排列为列数据

我尝试将数据从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文件原始数据

问题来源:stackoverflow

展开
收起
is大龙 2020-03-24 23:35:06 1101 0
1 条回答
写回答
取消 提交回答
  • 使用链接数据进行测试-添加index_col = 0将第一列转换为索引,然后通过DataFrame.reset_indexdrop = 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
    

    列的顺序不同,因为样本数据中的“数据3”具有尾随空格-“数据3”

    回答来源:stackoverflow

    2020-03-24 23:35:15
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
From Python Scikit-Learn to Sc 立即下载
Data Pre-Processing in Python: 立即下载
双剑合璧-Python和大数据计算平台的结合 立即下载