【问题标题】:Repeat df.reindex over multiple excel spreadsheets在多个 excel 电子表格上重复 df.reindex
【发布时间】:2020-05-22 20:35:17
【问题描述】:

谁能帮助我重新索引 Excel 文档的多张表?列顺序需要切换,以下适用于单张而不是多张....

如下打开电子表格时: df = pd.read_excel(excel_file, sheet_name=''Sheet Name')

并将新的列顺序定义为:

cols = (['N', 'Ø'])

然后重新索引到那个顺序

df = df.reindex(columns=cols)

它有效,但是当我选择 sheet_name=None 读取所有工作表时,我收到错误:

"AttributeError: 'dict' 对象没有属性'reindex'"

我是 Python 新手,所以无法理解为什么我不能在所有 df 上运行我的重新索引。

提前致谢

【问题讨论】:

    标签: python excel pandas indexing


    【解决方案1】:

    sheet_name=None 返回是{SheetName: pd.DataFrame} 的OrderedDict。在这里,我创建了一个简单的两张 .xlsx 文件,每张纸上有一行,具有不同的列标签。

    d = pd.read_excel('test.xlsx', sheet_name=None)
    
    for sheet_name, df in d.items():
        print(sheet_name)
        print(f'{df}\n')
    
    #Sheet1
    #   foo  bar
    #0   11   12
    #
    #Sheet2
    #   baz  boo
    #0    1    2
    

    所以如果你想修改它们,你可以遍历字典

    # Add 20, but you could reindex for instance. 
    for sheet_name, df in d.items():
        d[sheet_name] = df.add(20)
    
    print(d)
    #OrderedDict([('Sheet1',    
    #                 foo  bar
    #              0   31   32), 
    #             ('Sheet2',   
    #                 baz  boo
    #              0   21   22)])
    

    如果工作表都包含类似的信息,那么您可以将concat 放入单个 DataFrame。在这里,由于没有重叠的列,因此没有多大意义。工作表名称作为 MultiIndex 键添加,因此您始终可以将它们分开。

    df = pd.concat(d, sort=False)
    print(df)
    #           foo   bar   baz   boo
    #Sheet1 0  31.0  32.0   NaN   NaN
    #Sheet2 0   NaN   NaN  21.0  22.0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-10-12
      • 2016-09-01
      • 2015-02-17
      • 2011-11-09
      • 2014-08-24
      • 2011-05-10
      • 2013-05-03
      相关资源
      最近更新 更多