如何读取范围('A5:B10')并使用openpyxl将这些值放入数据框中

能够以类似于excel的方式定义范围,即“A5:B10”对于我所需要的非常重要,因此将整个表格读取到数据框并不是很有用。

所以我需要做的是从Excel工作表中的多个范围读取多个不同的数据框。

valuerange1 = ['a5:b10'] valuerange2 = ['z10:z20'] df = pd.DataFrame(values from valuerange) df = pd.DataFrame(values from valuerange1) 

要么

 df = pd.DataFrame(values from ['A5:B10']) 

我已经搜查,但无论我做了一个非常糟糕的search工作,或者其他人已经得到解决这个问题,但我真的不能。

谢谢。

使用openpyxl

既然你已经指出,你正在寻找一个非常用户友好的方式来指定范围(如excel语法),而查理·克拉克已经build议,你可以使用openpyxl。

以下实用程序函数使用工作簿和列/行范围,并返回一个pandas DataFrame:

 from openpyxl import load_workbook from openpyxl.utils import get_column_interval import re def load_workbook_range(range_string, ws): col_start, col_end = re.findall("[AZ]+", range_string) data_rows = [] for row in ws[range_string]: data_rows.append([cell.value for cell in row]) return pd.DataFrame(data_rows, columns=get_column_interval(col_start, col_end)) 

用法:

 wb = load_workbook(filename='excel-sheet.xlsx', read_only=True) ws = wb.active load_workbook_range('B1:C2', ws) 

输出:

  BC 0 5 6 1 8 9 

只有pandas解决scheme

给出Excel表中的以下数据:

  ABC 0 1 2 3 1 4 5 6 2 7 8 9 3 10 11 12 

您可以使用以下命令加载它: pd.read_excel('excel-sheet.xlsx')

如果您要限制正在读取的数据, pandas.read_excel方法提供了许多选项。 使用parse_colsskiprowsskip_footerselect要加载的特定子集:

 pd.read_excel( 'excel-sheet.xlsx', # name of excel sheet names=['B','C'], # new column header skiprows=range(0,1), # list of rows you want to omit at the beginning skip_footer=1, # number of rows you want to skip at the end parse_cols='B:C' # columns to parse (note the excel-like syntax) ) 

输出:

  BC 0 5 6 1 8 9 

一些说明:

read_excel方法的API并不意味着支持更复杂的select。 如果你需要一个复杂的filter,将整个数据加载到一个DataFrame中并且使用pandas提供的优秀的切片和索引机制更容易(更清洁)。

这可以使用openpyxl相当容易地完成。 请参阅将工作表转换为数据框一节 。 当然,这也将与单元格区域一起工作。