Python Pandas Dataframe 读取Excel工作表中的精确指定范围

piok6c0g  于 2022-11-18  发布在  Python
关注(0)|答案(3)|浏览(248)

我有很多不同的表(以及Excel工作表中的其他非结构化数据)。我需要从Excel工作表“data”的“Sheet2”创建超出范围“A3:D20”的数据框。
所有的例子,我遇到钻取到表级,但不是如何挑选它从一个确切的范围。

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[]
z2acfund

z2acfund1#

使用pandas read_excel documentation中的以下参数:

  • 跳过:类似列表
  • 要在开头跳过的行(0-索引)
  • nrows:int,默认值为无
  • 要分析的行数。
  • 解析列:int或list,默认值为None
  • 如果为None,则分析所有列,
  • 如果是int,则表示要分析的最后一列
  • 如果list of int,则表示要解析的列号列表
  • 如果为string,则表示以逗号分隔的列名和列范围列表(例如“A:E”或“A,C,E:F”)

我想象着这个称呼会是这样的:

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

编辑:

在Pandas的后续版本中,parse_cols已被重命名为usecols,因此上述调用应重写为:

df = read_excel(filename, 'Sheet2', skiprows = 2, nrows=18,  usecols= 'A:D')
i86rm4rw

i86rm4rw2#

一种方法是使用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)
polhcujo

polhcujo3#

我用PandasO.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的新参数

相关问题