El *_*iño 2 python python-2.7 openpyxl
我正在尝试做一个令人难以置信的简单事情:将Excel工作表的一部分加载到Numpy数组中.我找到了一个有效的kludge,但它令人尴尬的是unpythonic:说我的工作表加载为"ws",代码:
A = np.zeros((37,3))
for i in range(2,39):
for j in range(1,4):
A[i-2,j-1]= ws.cell(row = i, column = j).value
Run Code Online (Sandbox Code Playgroud)
将"ws"的内容加载到数组A.
必须有一个更优雅的方式来做到这一点.例如,csvread允许更自然地执行此操作,虽然我可以将.xlsx文件转换为csv文件,但使用openpyxl的整个目的是避免转换.那么我们就是强大的Intertubes的集体智慧:什么是更加琐碎的方式来执行这个概念上的微不足道的操作?
提前感谢您的回答.
PS:我通过Spyder在Mac上运行Python 2.7.5,是的,我确实阅读了openpyxl教程,这是我做到这一点的唯一原因.
你可以做到
A = np.array([[i.value for i in j] for j in ws['C1':'E38']])
Run Code Online (Sandbox Code Playgroud)
编辑 - 进一步解释.(首先感谢我介绍openpyxl,我怀疑我会不时地使用它)
list(ws['C1':'E38'])的列表或上面的列表理解这样做的好处是:无需计算出数组的维度并使其成为空的,不需要计算出np数组的修正索引号,更快地列出推导.缺点是它需要以"A1"格式定义的"角落".如果范围不知道,那么你必须使用iter_rows,rows或columns
A = np.array([[i.value for i in j[2:5]] for j in ws.rows])
Run Code Online (Sandbox Code Playgroud)
如果您不知道有多少列,那么您将需要循环并检查更像您原始想法的值
| 归档时间: |
|
| 查看次数: |
6609 次 |
| 最近记录: |