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]()