[英]Openpyxl: iterate through all rows of one column
我有一個包含 2 列和數千行的工作表文件。 我想遍歷所有行但只抓取第一列。
這會打印出每一列,如何打印例如“A”:
from openpyxl import load_workbook
workbook = load_workbook('file.xlsx')
sheet = workbook['Table1']
for row in sheet:
for cell in row:
print(sheet[cell.coordinate].value)
讓它像這樣運行,但是沒有比較子句有沒有更有效的方法?
for row in sheet:
for cell in row:
if cell.coordinate[0] == 'A':
print(sheet[cell.coordinate].value)
您可以遍歷所有行,然后直接訪問該行和第一列中的單元格:
for rowNumber in range(1, sheet.max_row + 1):
print(sheet.cell(row=rowNumber, column=1).value)
使用 dataframe 它可以更簡單並且應該運行得更快:
import pandas as pd
df = pd.read_excel('file.xlsx', sheet_name="Table1")
print(df.iloc[:,[0]])
使用 openpyxl vs pandas 加載一個有點大的 excel 文件的性能測試(提供我上述聲明的 PoC 並提供一些實際測試結果以回復 Charlie Clark 在下面的評論)。 這完全是為了相互學習和分享知識而不是任何其他原因。
准備一個大文件:
import openpyxl as xl
wb = xl.Workbook()
ws = wb['Sheet']
wb.save("DUMMY1.xlsx")
xfile = xl.load_workbook('DUMMY1.xlsx')
# Load 100000 rows and 10 columns
sheet = xfile['Sheet']
for i in range(100001):
for j in range(10):
sheet.cell(row=i+1, column=j+1).value = "Hello "+str(i+1+j+1)
xfile.save('DUMMY2.xlsx')
性能測試:
import timeit
import openpyxl as xl
import pandas as pd
def func1():
xl1 = xl.load_workbook("DUMMY2.xlsx")
return xl1
def func2():
df = pd.read_excel("DUMMY2.xlsx")
return df
print(timeit.timeit('func1()', globals=globals(), number=1))
print(timeit.timeit('func2()', globals=globals(), number=1))
結果:
40.4193192
19.396849500000002
如您所見,使用 openpyxl 加載 excel 文件所花費的時間是使用 pandas 加載時間的兩倍多。 如果您使用 xlrd 和 pandas 組合加載,它甚至比加載到 pandas dataframe 快一點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.