Với gấu trúc, thật dễ dàng để đọc các tệp Excel và chuyển đổi dữ liệu thành DataFrame. Thật không may, các tệp Excel trong thế giới thực thường được xây dựng kém. Trong những trường hợp dữ liệu nằm rải rác trên trang tính, bạn có thể cần tùy chỉnh cách đọc dữ liệu. Bài viết này sẽ thảo luận về cách sử dụng pandas và openpyxl để đọc các loại tệp Excel này và chuyển đổi rõ ràng dữ liệu thành DataFrame phù hợp để phân tích thêm
Vấn đề
Hàm pandas
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]4 thực hiện công việc xuất sắc trong việc đọc bảng tính Excel. Tuy nhiên, trong trường hợp dữ liệu không phải là bảng liên tục bắt đầu từ ô A1, kết quả có thể không như bạn mong đợi
Nếu bạn cố gắng đọc trong bảng tính mẫu này bằng cách sử dụng
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]5
Bạn sẽ nhận được một thứ trông giống như thế này
Những kết quả này bao gồm rất nhiều cột
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]6, nhãn tiêu đề trong một hàng cũng như một số cột bổ sung mà chúng tôi không cần
Giải pháp Pandas
Giải pháp đơn giản nhất cho tập dữ liệu này là sử dụng các đối số
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]7 và
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]8 cho
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]9. Đặc biệt, tham số
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]8 có thể rất hữu ích để kiểm soát các cột mà bạn muốn đưa vào
Nếu bạn muốn làm theo các ví dụ này, tệp có trên github
Đây là một phương pháp thay thế để chỉ đọc dữ liệu chúng tôi cần
import pandas as pd from pathlib import Path src_file = Path.cwd[] / 'shipping_tables.xlsx' df = pd.read_excel[src_file, header=1, usecols='B:F']
DataFrame kết quả chỉ chứa dữ liệu chúng tôi cần. Trong ví dụ này, chúng tôi cố tình loại trừ cột ghi chú và trường ngày
Logic tương đối đơn giản.
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]8 có thể chấp nhận các phạm vi Excel như
df = pd.read_excel[ src_file, header=1, usecols=['item_type', 'order id', 'order date', 'state', 'priority']]2 và chỉ đọc trong các cột đó. Tham số
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]7 mong đợi một số nguyên duy nhất xác định cột tiêu đề. Giá trị này được lập chỉ mục 0, vì vậy chúng tôi chuyển vào
df = pd.read_excel[ src_file, header=1, usecols=['item_type', 'order id', 'order date', 'state', 'priority']]4 mặc dù đây là hàng 2 trong Excel
Trong một số trường hợp, chúng tôi có thể muốn xác định các cột dưới dạng danh sách các số. Trong ví dụ này, chúng ta có thể xác định danh sách các số nguyên
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]
Cách tiếp cận này có thể hữu ích nếu bạn có một số loại mẫu số mà bạn muốn theo dõi cho một tập dữ liệu lớn [tôi. e. mọi cột thứ 3 hoặc chỉ các cột được đánh số chẵn]
Pandas
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]8 cũng có thể lấy danh sách tên cột. Mã này sẽ tạo một DataFrame tương đương
df = pd.read_excel[ src_file, header=1, usecols=['item_type', 'order id', 'order date', 'state', 'priority']]
Việc sử dụng danh sách các cột được đặt tên sẽ hữu ích nếu thứ tự cột thay đổi nhưng bạn biết rằng tên sẽ không thay đổi
Cuối cùng,
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]8 có thể thực hiện chức năng có thể gọi được. Dưới đây là một ví dụ dạng dài đơn giản loại trừ các cột không có tên cũng như cột mức độ ưu tiên
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]6
Khái niệm chính cần ghi nhớ là hàm sẽ phân tích cú pháp từng cột theo tên và phải trả về một giá trị
df = pd.read_excel[ src_file, header=1, usecols=['item_type', 'order id', 'order date', 'state', 'priority']]7 hoặc
df = pd.read_excel[ src_file, header=1, usecols=['item_type', 'order id', 'order date', 'state', 'priority']]8 cho mỗi cột. Những cột được đánh giá là
df = pd.read_excel[ src_file, header=1, usecols=['item_type', 'order id', 'order date', 'state', 'priority']]7 sẽ được bao gồm
Một cách tiếp cận khác để sử dụng hàm có thể gọi được là bao gồm biểu thức
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]60. Đây là một ví dụ mà chúng tôi muốn chỉ bao gồm một danh sách các cột được xác định. Chúng tôi chuẩn hóa tên bằng cách chuyển đổi chúng thành chữ thường để so sánh
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]1
Các hàm có thể gọi được mang lại cho chúng tôi rất nhiều sự linh hoạt để xử lý các tệp Excel lộn xộn trong thế giới thực
Phạm vi và Bảng
Trong một số trường hợp, dữ liệu có thể bị xáo trộn nhiều hơn trong Excel. Trong ví dụ này, chúng tôi có một bảng tên là
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]61 mà chúng tôi muốn đọc. Nếu bạn phải làm việc với một tệp như thế này, thì có thể khó đọc với các tùy chọn gấu trúc mà chúng ta đã thảo luận cho đến nay
Trong trường hợp này, chúng ta có thể sử dụng trực tiếp openpyxl để phân tích cú pháp tệp và chuyển đổi dữ liệu thành DataFrame của gấu trúc. Việc dữ liệu nằm trong bảng Excel có thể giúp quá trình này dễ dàng hơn một chút
Sau đây là cách sử dụng openpyxl [sau khi được cài đặt] để đọc tệp Excel
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]3
Điều này tải toàn bộ sổ làm việc. Nếu chúng tôi muốn xem tất cả các trang tính
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]4
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]5
Để truy cập trang tính cụ thể
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]6
Để xem danh sách tất cả các bảng có tên
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]7
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]0
Khóa này tương ứng với tên mà chúng tôi đã gán trong Excel cho bảng. Bây giờ, chúng tôi truy cập vào bảng để lấy phạm vi Excel tương đương
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]1
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]2
Điều này làm việc. Bây giờ chúng tôi biết phạm vi dữ liệu chúng tôi muốn tải. Bước cuối cùng là chuyển đổi phạm vi đó thành DataFrame của gấu trúc. Đây là một đoạn mã ngắn để lặp qua từng hàng và chuyển đổi thành DataFrame
df = pd.read_excel[src_file, header=1, usecols=[1,2,3,4,5]]3
Đây là DataFrame kết quả
Bây giờ chúng ta có bảng sạch và có thể sử dụng để tính toán thêm
Bản tóm tắt
Trong một thế giới lý tưởng, dữ liệu chúng tôi sử dụng sẽ ở định dạng nhất quán đơn giản. Hãy xem bài báo này để có một cuộc thảo luận thú vị về các phương pháp sử dụng bảng tính hiệu quả trông như thế nào
Trong các ví dụ trong bài viết này, bạn có thể dễ dàng xóa các hàng và cột để định dạng tốt hơn. Tuy nhiên, có những lúc điều này không khả thi hoặc không nên. Tin vui là pandas và openpyxl cung cấp cho chúng tôi tất cả các công cụ cần thiết để đọc dữ liệu Excel - bất kể bảng tính có trở nên điên rồ đến đâu