使用熊猫阅读具有多个标题的Excel表格
我有一个带有多个标题的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 | ..........................................................
现在在这里您可以看到前两列没有标题,它们为空白,而其他列具有标题,例如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')
但是我不知道它没有正确读取列,我认为不会以我想要的方式返回结果。所以,我希望结果框架应该像这样:
________________________________________________________________________________________________________
____|_____| 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 | ......................................................................................
有任何建议请。谢谢。
-
熊猫已经具有将为您读取整个Excel电子表格的功能,因此您无需手动分析/合并每张工作表。看看pandas.read_excel()。它不仅使您可以单行读取Excel文件,还提供了一些选项来帮助解决您遇到的问题。
由于您有子列,因此您正在寻找的是MultiIndexing。默认情况下,大熊猫将在第一行中作为唯一的标题行读取。您可以向其中传递一个
header
参数pandas.read_excel()
,该参数指示要用作标题的行数。在您的特定情况下,您需要header=[0, 1]
指示前两行。您可能还会有多张纸,因此您也可以通过sheetname=None
(这告诉它要遍历所有纸)。该命令将是:df_dict = pandas.read_excel('ExcelFile.xlsx', header=[0, 1], sheetname=None)
这将返回一个字典,其中的键是工作表名称,值是每个工作表的DataFrames。如果要将其全部折叠到一个DataFrame中,则可以简单地使用pandas.concat:
df = pandas.concat(df_dict.values(), axis=0)