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

时间:2016-07-25 06:08:38

标签: python excel pandas

我有很多不同的表格(以及excel表格中的其他非结构化数据)。我需要创建一个超出范围的数据框架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[]

3 个答案:

答案 0 :(得分:8)

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

  
      
  • skiprows:list-like      
        
    • 开始时跳过的行(0索引)
    •   
  •   
  • parse_cols:int或list,默认为None      
        
    • 如果为None,则解析所有列,
    •   
    • 如果int则表示要解析的最后一列
    •   
    • 如果整数列表则表示要解析的列号列表
    •   
    • 如果字符串则表示以逗号分隔的列名和列范围列表(例如“A:E”或“A,C,E:F”)
    •   
  •   

我想这个电话会是这样的:

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

答案 1 :(得分:5)

执行此操作的一种方法是使用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 :(得分:2)

我对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