【问题标题】:Pandas reading excel file with simple multicolumn index熊猫使用简单的多列索引读取 excel 文件
【发布时间】:2016-06-22 15:31:15
【问题描述】:

我有一个看起来像这样的 excel 文件

当我读到 pandas.read_excel 时,pandas 会返回一个 df,如下所示:

                                        1998 Unnamed: 1  1999 Unnamed: 3  \
Angélus                                   20        -35    16         au   
Angludet                                  17         au    16         vo   
Arnaud de Jacquemeau                      16         vo    16         vo   
Ausone                                    20        -40    18        -25   
Barde-Haut                                17         au    17         vo   

有没有办法告诉熊猫关于多列的信息,以便输出是

                                        1998       1998  1999       1999
Angélus                                   20        -35    16         au   
Angludet                                  17         au    16         vo   
Arnaud de Jacquemeau                      16         vo    16         vo   
Ausone                                    20        -40    18        -25   
Barde-Haut                                17         au    17         vo   

                                               1998            1999
Angélus                                   20        -35    16         au   
Angludet                                  17         au    16         vo   
Arnaud de Jacquemeau                      16         vo    16         vo   
Ausone                                    20        -40    18        -25   
Barde-Haut                                17         au    17         vo  

谢谢帕特里克

【问题讨论】:

    标签: python excel pandas dataframe


    【解决方案1】:

    你可以试试:

    df.columns = df.columns.to_series().str.replace(r'^Unnamed', np.nan).fillna(method='ffill').tolist()
    

    【讨论】:

      【解决方案2】:

      您需要创建一个新的列列表,然后重新定义列名称,如下所示:

      df.columns = df.columns.astype(str)    
      new_columns = [df.columns[i-1]  if df.columns[i].find("Unnamed") >= 0 else df.columns[i] for i in range(len(df.columns))]
      df.columns = new_columns
      

      或者你可以在一行中通过

      df.columns = [df.columns[i-1]  if df.columns[i].find("Unnamed") >= 0 else df.columns[i] for i in range(len(df.columns))]
      

      【讨论】:

      • 那是一个不错的选择。谢谢
      • @Pat 如果这可以解决您的问题,请将其标记为答案。
      猜你喜欢
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 1970-01-01
      • 2021-11-11
      • 1970-01-01
      • 2021-09-01
      • 2017-02-20
      相关资源
      最近更新 更多