Python có thể đọc các tệp xls không?

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

Chỉ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

Thiết lập thử nghiệm

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 pd
import numpy as np
from joblib import Parallel, delayed
import time
for 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”]
5 cách tải dữ liệu trong PythonIdea #1. Tải tệp Excel bằng Python

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[]
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 cách đơn giản để nhập tệp Excel trong Python

Mất khoảng 50 giây để chạy. Khá chậm

Ý tưởng số 2. Sử dụng CSV thay vì Tệp Excel

Bâ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[]
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

Nhập tệp csv bằng Python nhanh hơn 100 lần so với tệp Excel

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ơn

Chú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ó,

  1. Chúng tôi tải từng DataFrame một cách độc lập trong danh sách
  2. Sau đó nối toàn bộ danh sách trong một DataFrame duy nhất
start = time.time[]
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

Một cách thông minh hơn để nhập tệp csv trong Python

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 Joblib

Chú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[]
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

Nhập tệp CSV bằng Python song song bằng Joblib

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]:
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]]

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

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

  1. 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
  2. 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.
Thưởng. Tải tệp Excel song song

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

Cách tải tệp excel bằng song song hóa trong Python

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ắt

Bằ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
Phần thưởng #2. Song song hóa nhanh hơn gấp 4 lần

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ữa

Chú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 //]

Python có thể đọc các tệp Excel không?

Về mặt kỹ thuật, nhiều gói cho phép chúng tôi làm việc với các tệp Excel bằng Python . Tuy nhiên, trong hướng dẫn này, chúng ta sẽ sử dụng thư viện pandas và xlrd để tương tác với sổ làm việc Excel. Về cơ bản, bạn có thể coi DataFrame của gấu trúc là một bảng tính với các hàng và cột được lưu trữ trong các đối tượng Sê-ri.

Gấu trúc có đọc được XLS không?

Đọc tệp Excel vào DataFrame của gấu trúc. Hỗ trợ các phần mở rộng tệp xls , xlsx , xlsm , xlsb , odf , ods và odt đọc từ hệ thống tệp cục bộ hoặc URL. Hỗ trợ tùy chọn đọc một trang tính hoặc danh sách các trang tính.

Làm cách nào để đọc tệp xls bằng Python bằng gấu trúc?

Chúng ta có thể sử dụng hàm read_excel[] của mô-đun pandas để đọc dữ liệu tệp excel vào một đối tượng DataFrame . Nếu bạn nhìn vào một bảng excel, đó là một bảng hai chiều. Đối tượng DataFrame cũng đại diện cho cấu trúc dữ liệu dạng bảng hai chiều.

Openpyxl có thể đọc XLS không?

openpyxl là một thư viện Python để đọc/ghi các tệp Excel 2010 xlsx/xlsm/xltx/xltm . Nó được sinh ra từ việc thiếu thư viện hiện có để đọc/ghi nguyên bản từ Python định dạng Office Open XML.

Chủ Đề