在多个Excel电子表格上重复df.reindex

时间:2020-02-06 18:02:09

标签: python excel pandas indexing

有人可以帮助我如何为多张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上运行我的索引。

预先感谢

1 个答案:

答案 0 :(得分: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