簡體   English   中英

Openpyxl:遍歷一列的所有行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM