Trang web này chứa các gợi ý đến thông tin tốt nhất hiện có về cách làm việc với các tệp Excel bằng ngôn ngữ lập trình Python
Đọc và ghi tệp Excel
Có sẵn các gói python để hoạt động với các tệp Excel sẽ chạy trên bất kỳ nền tảng Python nào và không yêu cầu sử dụng Windows hoặc Excel. Chúng nhanh, đáng tin cậy và mã nguồn mở
openpyxl
Gói khuyến nghị để đọc và ghi tệp Excel 2010 [ví dụ:. . xlsx]
Tải xuống. Tài liệu. Cai Xô nhỏ
xlsxwriter
Một gói thay thế để ghi dữ liệu, định dạng thông tin và đặc biệt là biểu đồ ở định dạng Excel 2010 [tức là. . xlsx]
Tải xuống. Tài liệu. GitHub
pyxlsb
Gói này cho phép bạn đọc các tệp Excel ở định dạng xlsb
Tải xuống. GitHub
pylightxl
Gói này cho phép bạn đọc các tệp
start = time.time[]0 và
df = pd.read_excel[“Dummy 0.xlsx”]
for file_number in range[1,10]:
df.append[pd.read_excel[f”Dummy {file_number}.xlsx”]]
end = time.time[]
print[“Excel:”, end — start]>> Excel: 53.4
start = time.time[]1 và ghi các tệp
df = pd.read_excel[“Dummy 0.xlsx”]
for file_number in range[1,10]:
df.append[pd.read_excel[f”Dummy {file_number}.xlsx”]]
end = time.time[]
print[“Excel:”, end — start]>> Excel: 53.4
start = time.time[]0
df = pd.read_excel[“Dummy 0.xlsx”]
for file_number in range[1,10]:
df.append[pd.read_excel[f”Dummy {file_number}.xlsx”]]
end = time.time[]
print[“Excel:”, end — start]>> Excel: 53.4
Tải xuống. Tài liệu. GitHub
xlrd
Gói này dùng để đọc dữ liệu và định dạng thông tin từ các tệp Excel cũ hơn [tức là. . xls]
Tải xuống. Tài liệu. GitHub
xlwt
Gói này dùng để ghi dữ liệu và định dạng thông tin vào các tệp Excel cũ hơn [tức là. . xls]
Tải xuống. Tài liệu. ví dụ. GitHub
xlutils
Gói này tập hợp các tiện ích yêu cầu cả
start = time.time[]3 và
df = pd.read_excel[“Dummy 0.xlsx”]
for file_number in range[1,10]:
df.append[pd.read_excel[f”Dummy {file_number}.xlsx”]]
end = time.time[]
print[“Excel:”, end — start]>> Excel: 53.4
start = time.time[]4, bao gồm khả năng sao chép và sửa đổi hoặc lọc các tệp excel hiện có
df = pd.read_excel[“Dummy 0.xlsx”]
for file_number in range[1,10]:
df.append[pd.read_excel[f”Dummy {file_number}.xlsx”]]
end = time.time[]
print[“Excel:”, end — start]>> Excel: 53.4
NB. Nói chung, các trường hợp sử dụng này hiện được bao phủ bởi openpyxl
Tải xuống. Tài liệu. GitHub
Viết Add-In Excel
Các sản phẩm sau có thể được sử dụng để viết phần bổ trợ Excel bằng Python. Không giống như các gói trình đọc và trình ghi, chúng yêu cầu cài đặt Microsoft Excel
PyXLL
PyXLL là một sản phẩm thương mại cho phép viết phần bổ trợ Excel bằng Python mà không cần VBA. Các hàm Python có thể được hiển thị dưới dạng các hàm trang tính [UDF], macro, menu và thanh công cụ ribbon
Trang chủ. Đặc trưng. Tài liệu. Tải xuống
xlwings
xlwings là một thư viện mã nguồn mở để tự động hóa Excel bằng Python thay vì VBA và hoạt động trên Windows và macOS. bạn có thể gọi Python từ Excel và ngược lại và viết UDF bằng Python [chỉ dành cho Windows]. xlwings PRO là một tiện ích bổ sung thương mại với chức năng bổ sung
Trang chủ. Tài liệu. GitHub. Tải xuống
Danh sách gửi thư / Nhóm thảo luận
Có một Group của Google chuyên làm việc với file Excel bằng Python, bao gồm các thư viện liệt kê bên trên cùng thao tác với ứng dụng Excel qua COM
Phát triển thương mại
Các công ty sau đây có thể cung cấp tư vấn và phát triển phần mềm thương mại và là chuyên gia làm việc với các tệp Excel bằng Python
Trong bài viết này, tôi sẽ chỉ cho bạn 5 cách để tải dữ liệu trong Python. Đạt được tốc độ tăng 3 bậc độ lớn
Nguồn. https. //www. hà mã. com/, miền công cộng
Là người dùng Python, tôi sử dụng tệp excel để tải/lưu trữ dữ liệu vì doanh nhân thích chia sẻ dữ liệu ở định dạng excel hoặc csv. Thật không may, Python đặc biệt chậm với các tệp Excel
Trong bài viết này, tôi sẽ chỉ cho bạn 5 cách để tải dữ liệu trong Python. Cuối cùng, chúng ta sẽ đạt được mức tăng tốc 3 bậc độ lớn. Nó sẽ nhanh như chớp
Thiết lập thử nghiệmChỉnh sửa [18/07/2021]. Tôi đã tìm ra cách để làm cho quá trình nhanh hơn gấp 5 lần [dẫn đến tăng tốc 5000 lần]. Tôi đã thêm nó như một phần thưởng ở cuối bài viết
Hãy tưởng tượng rằng chúng ta muốn tải 10 tệp Excel với 20000 hàng và 25 cột [tổng dung lượng khoảng 70MB]. Đây là trường hợp điển hình khi bạn muốn tải dữ liệu giao dịch từ ERP [SAP] sang Python để thực hiện một số phân tích
Hãy điền dữ liệu giả này và nhập các thư viện cần thiết [chúng ta sẽ thảo luận về dưa chua và joblib sau trong bài viết]
import pandas as pd5 cách tải dữ liệu trong PythonIdea #1. Tải tệp Excel bằng Python
import numpy as np
from joblib import Parallel, delayed
import timefor file_number in range[10]:
values = np.random.uniform[size=[20000,25]]
pd.DataFrame[values].to_csv[f”Dummy {file_number}.csv”]
pd.DataFrame[values].to_excel[f”Dummy {file_number}.xlsx”]
pd.DataFrame[values].to_pickle[f”Dummy {file_number}.pickle”]
Hãy bắt đầu với một cách đơn giản để tải các tệp này. Chúng tôi sẽ tạo một Khung dữ liệu Pandas đầu tiên và sau đó nối từng tệp Excel vào đó
start = time.time[]Một cách đơn giản để nhập tệp Excel trong Python
df = pd.read_excel[“Dummy 0.xlsx”]
for file_number in range[1,10]:
df.append[pd.read_excel[f”Dummy {file_number}.xlsx”]]
end = time.time[]
print[“Excel:”, end — start]>> Excel: 53.4
Mất khoảng 50 giây để chạy. Khá chậm
Ý tưởng số 2. Sử dụng CSV thay vì Tệp ExcelBây giờ hãy tưởng tượng rằng chúng tôi đã lưu các tệp này dưới dạng. csv [chứ không phải. xlsx] từ ERP/Hệ thống/SAP của chúng tôi
start = time.time[]Nhập tệp csv bằng Python nhanh hơn 100 lần so với tệp Excel
df = pd.read_csv[“Dummy 0.csv”]
for file_number in range[1,10]:
df.append[pd.read_csv[f”Dummy {file_number}.csv”]]
end = time.time[]
print[“CSV:”, end — start]>> CSV: 0.632
Bây giờ chúng tôi có thể tải các tệp này trong 0. 63 giây. Nhanh hơn gần 10 lần
Python tải tệp CSV nhanh hơn 100 lần so với tệp Excel. Sử dụng CSV
Côn. tệp csv hầu như luôn lớn hơn. tập tin xlsx. trong ví dụ này. tệp csv là 9. 5MB, trong khi. xlsx là 6. 4MB
Ý tưởng số 3. Tạo khung dữ liệu Pandas thông minh hơnChúng tôi có thể tăng tốc quá trình của mình bằng cách thay đổi cách chúng tôi tạo DataFrames cho gấu trúc của mình. Thay vì nối thêm từng tệp vào DataFrame hiện có,
- Chúng tôi tải từng DataFrame một cách độc lập trong danh sách
- Sau đó nối toàn bộ danh sách trong một DataFrame duy nhất
start = time.time[]Một cách thông minh hơn để nhập tệp csv trong Python
df = []
for file_number in range[10]:
temp = pd.read_csv[f”Dummy {file_number}.csv”]
df.append[temp]
df = pd.concat[df, ignore_index=True]
end = time.time[]
print[“CSV2:”, end — start]>> CSV2: 0.619
Chúng tôi đã giảm thời gian xuống một vài phần trăm. Dựa trên kinh nghiệm của tôi, thủ thuật này sẽ trở nên hữu ích khi bạn xử lý các Dataframes lớn hơn [df >> 100MB]
Ý tưởng số 4. Song song hóa Nhập CSV với JoblibChúng tôi muốn tải 10 tệp bằng Python. Thay vì tải từng tệp một, tại sao không tải tất cả chúng cùng một lúc, song song?
Chúng tôi có thể làm điều này một cách dễ dàng bằng cách sử dụng joblib
start = time.time[]Nhập tệp CSV bằng Python song song bằng Joblib
def loop[file_number]:
return pd.read_csv[f”Dummy {file_number}.csv”]
df = Parallel[n_jobs=-1, verbose=10][delayed[loop][file_number] for file_number in range[10]]
df = pd.concat[df, ignore_index=True]
end = time.time[]
print[“CSV//:”, end — start]>> CSV//: 0.386
Nhanh gần gấp đôi so với phiên bản lõi đơn. Tuy nhiên, theo nguyên tắc chung, đừng mong đợi tăng tốc quy trình của bạn lên gấp tám lần bằng cách sử dụng 8 lõi [ở đây, tôi đã tăng tốc gấp 2 lần bằng cách sử dụng 8 lõi trên Mac Air sử dụng chip M1 mới]
Song song hóa đơn giản trong Python với Joblib
Joblib là một thư viện Python đơn giản cho phép bạn chạy một hàm trong //. Trong thực tế, joblib hoạt động như một danh sách hiểu. Ngoại trừ mỗi lần lặp lại được thực hiện bởi một luồng khác nhau. Đây là một ví dụ
def loop[file_number]:Hãy coi joblib như một cách hiểu danh sách thông minh. Ý tưởng số 5. Sử dụng tập tin Pickle
return pd.read_csv[f”Dummy {file_number}.csv”]
df = Parallel[n_jobs=-1, verbose=10][delayed[loop][file_number] for file_number in range[10]]#equivalent to
df = [loop[file_number] for file_number in range[10]]
Bạn có thể đi [nhiều] nhanh hơn bằng cách lưu trữ dữ liệu trong các tệp pickle — một định dạng cụ thể được Python sử dụng — thay vì. tệp csv
Côn. bạn sẽ không thể mở tệp dưa chua theo cách thủ công và xem có gì trong đó
start = time.time[]
def loop[file_number]:
return pd.read_pickle[f”Dummy {file_number}.pickle”]
df = Parallel[n_jobs=-1, verbose=10][delayed[loop][file_number] for file_number in range[10]]
df = pd.concat[df, ignore_index=True]
end = time.time[]
print[“Pickle//:”, end — start]>> Pickle//: 0.072
Chúng tôi chỉ cắt giảm 80% thời gian chạy
Nói chung, làm việc với tệp pickle nhanh hơn nhiều so với tệp csv. Tuy nhiên, mặt khác, các tệp dưa chua thường chiếm nhiều dung lượng hơn trên ổ đĩa của bạn [không phải trong ví dụ cụ thể này]
Trong thực tế, bạn sẽ không thể trích xuất dữ liệu trực tiếp từ hệ thống trong các tệp pickle
Tôi khuyên bạn nên sử dụng dưa chua trong hai trường hợp sau
- Bạn muốn lưu dữ liệu từ một trong các quy trình Python của mình [và bạn không có kế hoạch mở nó trên Excel] để sử dụng sau này/trong một quy trình khác. Lưu Dataframes của bạn dưới dạng dưa chua thay vì. csv
- Bạn cần tải lại [các] tệp giống nhau nhiều lần. Lần đầu tiên bạn mở một tệp, hãy lưu nó dưới dạng dưa chua để bạn có thể tải phiên bản dưa chua trực tiếp vào lần tới.
Ví dụ. Hãy tưởng tượng rằng bạn sử dụng dữ liệu giao dịch hàng tháng [mỗi tháng bạn tải một tháng dữ liệu mới]. Bạn có thể lưu tất cả dữ liệu lịch sử dưới dạng. pickle và mỗi khi bạn nhận được một tệp mới, bạn có thể tải tệp đó một lần dưới dạng. csv và sau đó giữ nó dưới dạng. dưa chua cho lần sau.
Hãy tưởng tượng rằng bạn đã nhận được các tệp excel và bạn không có lựa chọn nào khác ngoài việc tải chúng như hiện trạng. Bạn cũng có thể sử dụng joblib để song song hóa việc này. So với mã dưa chua của chúng tôi ở trên, chúng tôi chỉ cần cập nhật chức năng vòng lặp
start = time.time[]Cách tải tệp excel bằng song song hóa trong Python
def loop[file_number]:
return pd.read_excel[f"Dummy {file_number}.xlsx"]
df = Parallel[n_jobs=-1, verbose=10][delayed[loop][file_number] for file_number in range[10]]
df = pd.concat[df, ignore_index=True]
end = time.time[]
print["Excel//:", end - start]>> 13.45
Chúng tôi có thể giảm 70% thời gian tải [từ 50 giây xuống 13 giây]
Bạn cũng có thể sử dụng vòng lặp này để tạo các tệp dưa chua một cách nhanh chóng. Vì vậy, lần tới khi bạn tải các tệp này, bạn sẽ có thể đạt được thời gian tải nhanh như chớp
def loop[file_number]:
temp = pd.read_excel[f"Dummy {file_number}.xlsx"]
temp.to_pickle[f"Dummy {file_number}.pickle"]
return temp
Tóm tắtBằng cách tải song song các tệp dưa chua, chúng tôi đã giảm thời gian tải từ 50 giây xuống dưới 1/10 giây
- Excel. 50 giây
- CSV. 0. 63 giây
- CSV thông minh hơn. 0. 62 giây
- CSV trong //. 0. 34 giây
- Dưa chua trong //. 0. 07 giây
- Trội hơn về //. 13. 5 giây
Joblib cho phép thay đổi chương trình phụ trợ song song hóa để loại bỏ một số chi phí. Bạn có thể thực hiện việc này bằng cách cung cấp cho Parallel=”threads"
Sử dụngprefer=”threads” sẽ cho phép bạn chạy quy trình của mình nhanh hơn nữaChúng tôi thu được tốc độ khoảng 0. 0096 giây [hơn 50 lần chạy với MacBook Air 2021]
Sử dụngprefer=”threads” với song song hóa CSV và Excel sẽ cho kết quả như sau
Như bạn có thể thấy, việc sử dụng phụ trợ “Chủ đề” dẫn đến điểm kém hơn khi đọc các tệp Excel. Nhưng với hiệu suất đáng kinh ngạc với dưa chua [phải mất 50 giây để tải từng tệp Excel một và chỉ 0. 01 giây để tải dữ liệu đọc tệp dưa chua trong //]