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