我有一个包含多个标题的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 | ......................................................................................
有什么建议吗。谢谢。
Pandas已经有一个函数可以为您读取整个Excel电子表格,因此您不需要手动分析/合并每个工作表。看看pandas.read_excel()。它不仅允许您在一行中读取一个Excel文件,还提供了帮助解决问题的选项。
既然你有子列,你要找的是MultiIndexing。默认情况下,pandas将在顶行中读取作为唯一的标题行。您可以将
header
参数传递到pandas.read_excel()
中,该参数指示要用作标题的行数。在您的特定情况下,您需要header=[0, 1]
,指示前两行。你也可能有多张纸,所以你也可以通过sheetname=None
(这告诉它要通过所有的纸)。命令是:这将返回一个字典,其中键是工作表名称,值是每个工作表的数据帧。如果要将其全部折叠为一个数据帧,只需使用pandas.concat:
相关问题 更多 >
编程相关推荐