Python Pandas-同时按列索引和列标题提取excel数据

Python Pandas-同时按列索引和列标题提取excel数据,python,excel,pandas,Python,Excel,Pandas,我正在尝试编写一个脚本,从几个Excel文件中提取数据。它们包含10到15列。 从这些列中,我需要在每个文件中具有不同标题的第一列,以及始终具有相同标题名称的其他一些列(“总计”、“清除”、“不清除”和“系统”),但它们位于不同文件中不同的列索引下。 (我的意思是,在其中一个文件中,“总计”是表中的第3列,但在另一个文件中是第5列) 我知道使用usecols关键字可以指定要使用的列,但这个参数似乎只接受标题名或列索引,而不会同时使用它们 是否可以编写一个语句,同时按索引获取第一列,然后按标题名获

我正在尝试编写一个脚本,从几个Excel文件中提取数据。它们包含10到15列。 从这些列中,我需要在每个文件中具有不同标题的第一列,以及始终具有相同标题名称的其他一些列(“总计”、“清除”、“不清除”和“系统”),但它们位于不同文件中不同的列索引下。 (我的意思是,在其中一个文件中,“总计”是表中的第3列,但在另一个文件中是第5列)

我知道使用
usecols
关键字可以指定要使用的列,但这个参数似乎只接受标题名或列索引,而不会同时使用它们

是否可以编写一个语句,同时按索引获取第一列,然后按标题名获取其他列

下面的语句不起作用:

df = pd.read_excel(file, usecols = [0,'TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM'])

您可以使用
pd.read_excel()
两次,然后加入两个dfs

df1 = pd.read_excel(file, usecols = [0])
df2 = pd.read_excel(file, usecols = ['TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM'])
df = pd.concat([df1, df2], axis = 1, join = 'outer')

如果它只有15列,那么不读取文件两次可能会更快。 您可以将整个文件读入内存,然后使用更好的pandas界面提取所需的列:

df = pd.read_excel(file)
df = df[ [ df.columns[0], 'TOTAL', 'CLEAR', 'NON-CLEAR','SYSTEM'] ]
给你:

def callable():
第一列=无
def流程(列名称):
非局部第一列
如果第一列为无:
第一列=列名称
返回真值
如果第一列==列名称:
返回真值
返回['TOTAL'、'CLEAR'、'NON-CLEAR'、'SYSTEM'中的列名称]
返回过程
打印(pd.read\u csv(文件,usecols=callable())

目前我使用“修补程序”只是读取整个数据文件,而不指定任何
usecols
。关于性能和程序内存使用,这两个解决方案(您的还是我的)中哪一个更好?我说的是包含大量数据的大文件。我想我的文件效率更高,但我不是这方面的专家。您可以在jupyter笔记本中运行这两个soloutuions,并使用
%%time
跟踪它们的速度。我认为使用
use\cols
arg不可能做到这一点,您可以读取0行,只需将列拼接在一起。@datanoveler
usecols
确实需要调用。