如何读取范围('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_cols
, skiprows
和skip_footer
select要加载的特定子集:
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相当容易地完成。 请参阅将工作表转换为数据框一节 。 当然,这也将与单元格区域一起工作。