我有一张格式很差的excel表格。我想要使用的实际列名是跨两行的;例如,如果正确的列名应该是Labor Percent
,则单元格A1
将包含Labor
,单元格A2
将包含Percent
)。
我尝试加载文件,下面是我正在做的事情:
import os
os.getcwd()
os.chdir(r'xxx')
import pandas as pd
file = 'problem.xls'
xl = pd.ExcelFile(file)
print(xl.sheet_names)
df = xl.parse('WEEKLY NUMBERS', skiprows=35)
正如您在图片中看到的,应该是列名的其余部分在第二行。有没有办法通过连接来重命名这些列?这可以通过xl.parse
位中的header=
参数以某种方式完成吗?
发布于 2018-03-28 18:29:17
您可以通过设置以下内容来重命名列:
df.columns = ['name1', 'name2', 'name3' ...]
请注意,必须为每一列指定一个名称。
然后删除第一行以删除不需要的列名称行。
df = df.drop(0)
发布于 2018-03-28 18:35:10
这里有一些你可以尝试的东西。从本质上讲,它将前两行作为标题读取,但将其视为分层多索引。然后,下面的第二行代码将该多索引向下展平为单个字符串。我不能百分之百确定它是否适用于您的数据,但值得一试-它适用于我尝试过的小型虚拟测试数据:
df = pd.read_excel('problem.xlsx', sheetname='WEEKLY NUMBERS', header=[0, 1])
df.columns = df.columns.map(' '.join)
第二行取自this answer关于展平多索引的回答。
https://stackoverflow.com/questions/49541513
复制