Python Pandas 数据框在 Excel 工作表中读取精确的指定范围
Posted
技术标签:
【中文标题】Python Pandas 数据框在 Excel 工作表中读取精确的指定范围【英文标题】:Python Pandas dataframe reading exact specified range in an excel sheet 【发布时间】:2016-11-28 09:10:23 【问题描述】:我有很多不同的表格(以及 Excel 工作表中的其他非结构化数据)。我需要从 Excel 工作表“数据”的“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[]
【问题讨论】:
我会说这是一个在 pandas 必须读取指定范围的单元格时非常方便的选项。对于包含不必要信息或元数据或其他类型的不需要最终进入数据分析管道的东西的公司电子表格可能就是这种情况。我希望 pandas 社区包含这个range=[]
参数。
【参考方案1】:
我对 pandas 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 的新参数进行改进和更新
【讨论】:
【参考方案2】:一种方法是使用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)
【讨论】:
感谢 vm - 看起来这将是一种方式.. 但似乎这样做的方式很漫长.. 哦好吧.. 再次感谢!【参考方案3】:使用来自pandas read_excel documentation 的以下参数:
skiprows : 类似列表 开头要跳过的行(从 0 开始) parse_cols : 整数或列表,默认无 如果 None 则解析所有列, 如果 int 则表示要解析的最后一列 如果是整数列表,则表示要解析的列号列表 如果字符串则表示以逗号分隔的列名和列范围列表(例如“A:E”或“A,C,E:F”)
我想电话会是这样的:
df = read_excel(filename, 'Sheet2', skiprows = 2, parse_cols = 'A:D')
【讨论】:
感谢 vm 的回复。我也有同样的想法,使用 'parse_cols' .. 但是如果第 20 行下面有我不想用于此目的的数据怎么办?跨度> @Dark Matter 我想要 excel 表 (workbook.worksheet.range) 的确切部分作为要在其中查找的数据框。read_excel 似乎只有删除行并应用要查看的列。 . 但这意味着该列的所有行(顶部跳过的行除外)都将被选中 那你为什么不转置数据框并再次选择你想要的任何东西 由于版本 0.23.0pandas.read_excel
有一个 nrows
参数,它指定要解析的行数。在这和parse_cols
之间应该能够指定一个连续的范围。
parse_cols
现在是 usecols
以上是关于Python Pandas 数据框在 Excel 工作表中读取精确的指定范围的主要内容,如果未能解决你的问题,请参考以下文章