Python Pandas read_excel解析Pandas 0.18.1和Pandas之间的MultiIndex数据帧时的不同行为> 0.19

时间:2017-06-02 11:10:05

标签: python excel pandas

我完全糊涂了。可能我错过了pandas API中的更新。

所以我有这个excel文件

enter image description here

Pandas 0.18.1中,我在阅读和解析文件时没有遇到任何问题。我使用了以下代码,

import pandas as pd
fname = 'SAMPLE_EXCEL_CAUSING_ERROR_IN_PANDAS_0_19_UP.xlsx'
pd.read_excel(fname, 'Sheet1', header=[0,1], index=[0,1])

它返回了我想要的东西。

[1]: https://i.stack.imgur.com/Muliy.png

最近,我更新了我的软件包,现在我的pandas位于version 0.20.1。但是,当我尝试使用相同的excel文件执行相同的代码时,它返回了一个错误。以下是错误消息:ValueError: Length of new names must be 1, got 2

enter image description here

有什么线索我错过了read_excel中的新API?我完全糊涂了。是否有任何解决方法可以使用excel列阅读MultiIndex文件?我的真实数据有3级索引而不是2级索引。非常感谢任何建议。

P.S。我无法降级到0.18.1,因为我的用户正在使用0.20.1

更新

奇怪的是,如果我将header设置为header=[1,2],那么它不会抛出任何错误消息。但是,我的指数错误。仍在尝试解决此问题。

enter image description here

3 个答案:

答案 0 :(得分:5)

您可以半手动制作索引

获取标题

仅从第二列开始占用前两行,并从左侧开始填充空单元格

header = pd.read_excel(fname, 'Sheet1', index=[0], header=None).iloc[:2, 1:].ffill(axis=1)

获取数据

省略前两行,并将第一列设置为索引

df = pd.read_excel(fname, 'Sheet1', skiprows=[0,1], index=0, header=None).rename(columns={0: 'A'}).set_index('A')

MultiIndex

df.columns=pd.MultiIndex.from_arrays(header.values)
  

DF

    B       D       F
    C   C   E   E   G   G
A                       
A1  X   Y   Z   U   J   K
A2  XX  YY  ZZ  UU  JJ  KK
A3  XXX     YYY     ZZZ     UUU     JJJ     KKK

答案 1 :(得分:0)

我在Windows上使用anaconda,并且使用以下命令对熊猫做了更新:​​

conda update pandas

现在我得到了想要的结果。

这是我的数据:

https://i.stack.imgur.com/ho13H.png

这是结果:

  pandas.read_excel(file, index_col=0, header=[0,1])
Out[7]: 
            MIN                                                            \
             C1       C2           C3       C4       T1       T2       T3   
0    195.207890        -   101.464978  142.434        -        -  943.799   
1   1018.091967  982.585  1008.165221   1089.3  3579.36  2897.13        -   
3    719.242505  768.078   798.991606  979.055   1562.6  1503.61  1635.22   
7    464.714785  115.527   339.229797  68.8829  181.388  552.229   809.36   
8    238.469139  173.027   197.930122        -  633.154  610.908  495.791   
10   384.770673  532.663   230.583377  444.087  2105.43  1109.59  1362.43   
14   420.279847  401.482   323.935379  393.111  1135.14  969.754  1030.53   
15   529.268355  375.933   501.639846  561.166  3001.63   3030.6  2617.78   
21   262.806700  259.203   444.979777        -  1194.33  1260.72  1070.19   
28   280.283310  287.044   275.809979  257.798  622.784  899.187  512.905   

                         COM                ...                               \
             T4           C1           C2   ...              T3           T4   
0   1235.989828   132.088723   127.384065   ...     1647.217230   448.336279   
1   3406.803144  1092.341474  1263.549755   ...     3399.548560  3144.652639   
3   1400.570267   911.110083   754.166616   ...     1651.774770  1690.612134   
7    734.734422   587.381973   568.188789   ...      872.138431   912.248578   
8    417.361810   182.506544   164.936057   ...      765.018292  1070.565315   
10  1148.614845   424.377037   449.054287   ...     1293.657158  1960.196871   
14   947.046046   536.630139   482.741047   ...     1041.749363  1159.747331   
15  2164.517695   558.597139   721.841033   ...     2548.803301  2743.534159   
21  1198.080826   530.759489   663.639841   ...     1372.536515  1296.604595   
28   665.474002   453.753921   236.935726   ...     1001.108816   677.224724   

           UND                                                              \
            C1          C2          C3       C4       T1       T2       T3   
0    17.126508   86.103158   84.637729        -        -    438.8  2004.51   
1   856.588602  696.177886  697.322434  684.055  4238.82  3420.76  2339.89   
3   523.836538  488.007532  804.293445  467.541        -  666.135  594.047   
7   289.235298  272.521236  239.166506  250.247  602.523  449.244  547.401   
8   140.495332   77.390391  114.810278  149.386        -        -        -   
10  220.994094  208.610597  233.131489  223.641  1082.33  1115.45  1040.81   
14  228.683350  250.932989  213.735624  225.627  623.491  598.308  555.539   
15  283.552101  280.930293  293.570089  244.061  791.533  1181.63  1069.91   
21  243.737751  233.957191  200.573198  203.905  795.793  903.329  1029.72   
28  155.424805  236.211838  197.738949  175.754  728.167  687.443  917.051   


         T4  
0   1555.74  
1   3369.02  
3   679.208  
7   207.939  
8         -  
10  1043.51  
14  602.447  
15  844.655  
21  958.073  
28  572.275  

[10 rows x 24 columns]

答案 2 :(得分:0)

似乎问题出在重复的列名,例如示例中的两个(B,C)列。