Python Pandas-首先查找标题,然后仅加载Excel工作表上的某些列

Python Pandas-首先查找标题,然后仅加载Excel工作表上的某些列,python,excel,pandas,csv,Python,Excel,Pandas,Csv,我试图用Pandas读取多个大型Excel文件,并将它们组合成一个CSV,并且只需要每个文件中一个数据表中的数据 在这个数据表中,有许多我不需要的填充行-基本上,我需要的数据从每个文件的不同位置开始。我需要的第一列数据称为行标签 有没有办法让熊猫在标题为行标签的列下方和右边的四列中提取数据 现在,这正是我一直在尝试但没有成功的地方: for f in glob.glob("../Test/Drawsheet*.xlsx"): df_temp = pd.ExcelFile(f) i

我试图用Pandas读取多个大型Excel文件,并将它们组合成一个CSV,并且只需要每个文件中一个数据表中的数据

在这个数据表中,有许多我不需要的填充行-基本上,我需要的数据从每个文件的不同位置开始。我需要的第一列数据称为
行标签

有没有办法让熊猫在标题为
行标签
的列下方和右边的四列中提取数据

现在,这正是我一直在尝试但没有成功的地方:

for f in glob.glob("../Test/Drawsheet*.xlsx"):
    df_temp = pd.ExcelFile(f)
    if 'PVT' in df_temp.sheet_names:
        df = pd.read_excel(df_temp, 'PVT', index_col=None, usecols='Row Labels')
        #df.to_csv('your_csv.csv', encoding='utf-8')
        #df = df_temp.parse('PVT')
        all_data = all_data.append(df, ignore_index=True, sort=True)

您可以告诉Pandas只加载第一行
20
(假设您的头在那里)。然后,您可以找到
行标签
值,然后使用此位置加载整个Excel文件。例如:

import pandas as pd

filename = 'input.xlsx'
sheet = 'Sheet1'

df = pd.read_excel(filename, sheet, nrows=20)
header_loc = df[df == 'Row Labels'].dropna(axis=1, how='all').dropna(how='all')
row = header_loc.index.item()
column = header_loc.columns.item()
df = pd.read_excel(filename, sheet, skiprows=row+1, usecols=list(range(column, column+5)))

如果您有一个CSV,下面的方法将起作用。它读取文件的每一行,并尝试在已解析的行中定位
行标签。这将失败,直到达到实际的标题行。当它这样做时,列索引用于在其右侧选择所需的列。
skiprows
参数用于告诉panda跳到文件中正确的标题行,并且
usecols
可以正确指定接下来的4个列名

import pandas as pd
import csv

filename = 'input.csv'

with open(filename, newline='') as f_csv:
    for row_number, row in enumerate(csv.reader(f_csv)):
        try:
            col = row.index('Row Labels')
            break
        except ValueError:
            continue

df = pd.read_csv(filename, skiprows=row_number, usecols=row[col:col+4])
print(df)

读入标题,找出列的位置,然后使用指定所需的5个索引的
usecols
读入文件。因此每个文件的列都不同。例如,有时它可能从G列开始,有时从H列开始。这就是为什么您只读取一行(
nrows=1
)(非常快),然后执行
idx=df.columns.get_loc('Row Labels')
,然后读取整个文件,指定
usecols=[*范围(idx,idx+5)]
如果行从第10行开始,而不是从第1行开始,您知道如何执行此操作吗?添加
skiprows=10
或需要多少行。这会转换为.xlsx吗?是的,我已经更新了答案。可以使熊猫只加载第一行并定位标题。然后可以使用该方法加载整个文件。