Python Pandas DataFrame считывает точный заданный диапазон в листе excel

У меня много разных таблиц (и других неструктурированных данных на листе excel). Мне нужно создать DataFrame вне диапазона "A3: D20" из "Sheet2" данных Excel.

Все примеры, с которыми я сталкиваюсь, сводятся до уровня листа, но не как выбрать его из определенного диапазона.

import openpyxl
import pandas as pd

wb = openpyxl.load_workbook('data.xlsx')
sheet = wb.get_sheet_by_name('Sheet2')
range = ['A3':'D20']   #<-- how to specify this?
spots = pd.DataFrame(sheet.range) #what should be the exact syntax for this?

print (spots)

Как только я получу это, я планирую искать данные в столбце A и найти соответствующее значение в столбце B.

Изменить 1: я понял, что openpyxl занимает слишком много времени и поэтому изменил это на pandas.read_excel('data.xlsx','Sheet2') вместо этого, и он намного быстрее на этом этапе.

Редактирование 2: пока я поставил свои данные только на одном листе и:

  • удалил всю другую информацию
  • добавленные имена столбцов,
  • Применил index_col в моем левом столбце
  • затем используется wb.loc[]

Ответ 1

Один из способов сделать это - использовать модуль openpyxl.

Вот пример:

from openpyxl import load_workbook

wb = load_workbook(filename='data.xlsx', 
                   read_only=True)

ws = wb['Sheet2']

# Read the cell values into a list of lists
data_rows = []
for row in ws['A3':'D20']:
    data_cols = []
    for cell in row:
        data_cols.append(cell.value)
    data_rows.append(data_cols)

# Transform into dataframe
import pandas as pd
df = pd.DataFrame(data_rows)

Ответ 2

Используйте следующие аргументы из документации pandas read_excel:

  • skiprows: список-как
    • Строки для пропуска в начале (с 0 индексами)
  • parse_cols: int или list, по умолчанию None
    • Если нет, то проанализируйте все столбцы,
    • Если int, то указывает на последний столбец, который будет проанализирован
    • Если список целых чисел, то указывает список номеров столбцов для анализа
    • Если строка, то указывает разделенный запятыми список имен столбцов и диапазонов столбцов (например, "A: E" или "A, C, E: F")

Я полагаю, что вызов будет выглядеть так:

df = read_excel(filename, 'Sheet2', skiprows = 2, parse_cols = 'A:D')

Ответ 3

мой ответ с пандами O.25 проверен и хорошо работает

pd.read_excel('resultat-elections-2012.xls', sheet_name = 'France entière T1T2', skiprows = 2,  nrows= 5, usecols = 'A:H')
pd.read_excel('resultat-elections-2012.xls', index_col = None, skiprows= 2, nrows= 5, sheet_name='France entière T1T2', usecols=range(0,8))

Итак: мне нужны данные после двух первых строк; выбранные нужные строки (5) и столбцы от A до H.
Будьте внимательны, ответ @shane нуждается в улучшении и обновлении с помощью новых параметров Pandas

my original excel

my process with pandas read_excel