使用Pandas读取带有多个标题的excel表

mua*_*aiz 9 python excel dataframe pandas

我有一个excel表,有多个标题,如:

_________________________________________________________________________
____|_____|        Header1    |        Header2     |        Header3      |
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColDK|
1   | ds  | 5  | 6  |9   |10  | .......................................
2   | dh  |  ..........................................................
3   | ge  |  ..........................................................
4   | ew  |  ..........................................................
5   | er  |  ..........................................................
Run Code Online (Sandbox Code Playgroud)

现在,您可以看到前两列没有标题,它们是空白的,但其他列的标题如Header1,Header2和Header3.所以我想阅读这张表并将其与其他具有类似结构的表合并.

我想在第一栏'ColX'上合并它.现在我这样做:

import pandas as pd

totalMergedSheet = pd.DataFrame([1,2,3,4,5], columns=['ColX'])
file = pd.ExcelFile('ExcelFile.xlsx')
for i in range (1, len(file.sheet_names)):
    df1 = file.parse(file.sheet_names[i-1])
    df2 = file.parse(file.sheet_names[i])
    newMergedSheet = pd.merge(df1, df2, on='ColX')
    totalMergedSheet = pd.merge(totalMergedSheet, newMergedSheet, on='ColX')
Run Code Online (Sandbox Code Playgroud)

但我不知道它的读取列是否正确,我认为不会以我想要的方式返回结果.所以,我希望得到的框架应该像:

________________________________________________________________________________________________________
____|_____|        Header1    |        Header2     |        Header3      |        Header4     |        Header5      |
ColX|ColY |ColA|ColB|ColC|ColD||ColD|ColE|ColF|ColG||ColH|ColI|ColJ|ColK| ColL|ColM|ColN|ColO||ColP|ColQ|ColR|ColS|
1   | ds  | 5  | 6  |9   |10  | ..................................................................................
2   | dh  |  ...................................................................................
3   | ge  |  ....................................................................................
4   | ew  |  ...................................................................................
5   | er  |  ......................................................................................
Run Code Online (Sandbox Code Playgroud)

请给我任何建议.谢谢.

bee*_*don 18

Pandas已经有一个函数可以读取整个Excel电子表格,因此您无需手动解析/合并每个工作表.看看pandas.read_excel().它不仅允许您在一行中读取Excel文件,还提供了帮助您解决问题的选项.

由于您有子列,您正在寻找的是MultiIndexing.默认情况下,pandas将在顶行中读取唯一标题行.您可以传入一个header参数pandas.read_excel(),指示要将多少行用作标题.在您的特定情况下,您需要header=[0, 1],指示前两行.您可能还有多张纸,因此您也可以传递sheetname=None(这会告诉它遍历所有纸张).命令是:

df_dict = pandas.read_excel('ExcelFile.xlsx', header=[0, 1], sheetname=None)
Run Code Online (Sandbox Code Playgroud)

这将返回一个字典,其中键是工作表名称,值是每个工作表的DataFrame.如果要将其全部折叠到一个DataFrame中,只需使用pandas.concat即可:

df = pandas.concat(df_dict.values(), axis=0)
Run Code Online (Sandbox Code Playgroud)