Панды - сначала найдите заголовок, затем загрузите только определенные столбцы на листе Excel - PullRequest
0 голосов
/ 08 июля 2019

Я пытаюсь прочитать несколько больших файлов Excel с помощью Pandas и объединить их в один CSV, и мне нужны только данные из одного листа данных из каждого файла.

В этом листе данных есть ряд строк-заполнителей, данные из которых мне не нужны - в основном, нужные мне данные начинаются в разных местах каждого файла.Первый столбец данных, которые мне нужны, называется Row Labels.

Есть ли способ, которым я могу получить от Pandas данные ниже столбца, озаглавленного Row Labels и четырьмя столбцами справа от него?

Прямо сейчас, это то, что я пыталсябезрезультатно:

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)

1 Ответ

0 голосов
/ 11 июля 2019

Вы можете указать Pandas просто загрузить первые 20 строки (при условии, что там есть ваш заголовок). Затем вы можете найти значение Row Labels и затем использовать это местоположение для загрузки всего файла 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, сработал бы следующий подход. Он читает каждую строку вашего файла и пытается найти Row Labels в разобранной строке. Это не удастся, пока не будет достигнута фактическая строка заголовка. Когда это происходит, индекс столбца используется для выбора нужных столбцов справа от него. Параметр skiprows используется для указания пандам перейти к правильной строке заголовка в файле, и usecols может быть правильно задан с помощью следующих четырех имен столбцов.

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...