Làm cách nào để đọc tệp excel có tên trang tính trong pandas?

Trong công việc hàng ngày của mình, tôi làm việc với các tệp Excel khá nhiều - lấy các tệp Excel, hầu hết chứa nhiều trang tính và tải chúng vào Python bằng Pandas cho nhiều tác vụ khác nhau. Tôi thấy quy trình này khá rườm rà, cho đến khi một đồng nghiệp (cảm ơn Gab Lin. ) đã dạy tôi một thủ thuật đơn giản mà từ đó cho phép tôi thực hiện nhiệm vụ này một cách trực quan và hiệu quả hơn. Cho phép tôi trả nó về phía trước trong bài viết này. 🙂

Các mã được trình bày trong bài viết này có thể được tìm thấy tại repo GitHub này

Dữ liệu

Trước khi đi vào mấu chốt, trước tiên chúng ta hãy xem tệp Excel sau đây mà tôi đã tạo và sẽ sử dụng để minh họa

Tệp Excel có nhiều trang tính (GIF của Tác giả)

Nó chứa dữ liệu bán hàng hư cấu (và rất đơn giản) trong ba tháng liên tiếp - từ tháng 1 đến tháng 3. Dữ liệu bán hàng cho mỗi tháng được hiển thị trong các bảng tính riêng biệt

Những gì tôi đã làm trước đây và những hạn chế của nó

Giả sử mục tiêu của tôi là kết hợp dữ liệu từ tất cả các trang tính lại với nhau thành một Khung dữ liệu Pandas duy nhất. Để đạt được nhiệm vụ này, tôi đã từng làm như sau

  1. Nhận danh sách tên của tất cả các trang tính, sử dụng openpyxl hoặc pandas
  2. Lặp lại qua từng trang tính, phân tích cú pháp từng trang dưới dạng Khung dữ liệu Pandas và nối từng Khung dữ liệu vào danh sách khác
  3. Hợp nhất tất cả vào một DataFrame duy nhất bằng cách sử dụng pd.concat

Mã của tôi sẽ trông giống như thế này

Hình ảnh của tác giả

Như bạn có thể tưởng tượng, có một số vấn đề với cách tiếp cận này

  • Bạn có ít nhất 8 dòng mã để thực hiện một tác vụ đơn giản, khá kém hiệu quả
  • Bạn không thể tải tệp Excel vào Python mà không biết tên của các trang tính trước. Bạn cần một chút kỹ thuật đảo ngược — trước tiên bạn cần tìm ra tên của các trang tính trước khi chỉ định đối số sheet_name tương ứng trong hàm pd.read_excel()
  • Bạn cần chỉ định tên chính xác của (các) trang tính bạn muốn tải. Điều này có thể đơn giản nếu bạn đang tải dữ liệu từ một trang tính hoặc nếu tên của trang tính đơn giản, nhưng điều này dễ xảy ra lỗi nếu bạn có nhiều trang tính hoặc nếu tên trang tính phức tạp
thủ thuật

Bây giờ, để giải quyết những vấn đề này, đây là mẹo — chỉ cần chỉ định đối số sheet_name

import pandas as pdwriter = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')writer.close()
1 trong hàm pd.read_excel(). Vâng, đơn giản như vậy. Hãy xem qua điều này

Bằng cách chỉ định

import pandas as pdwriter = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')writer.close()
3 trong hàm pd.read_excel(), bạn sẽ có được một từ điển Pandas DataFrames, trong đó các khóa là tên của các trang tính và các giá trị là dữ liệu trong mỗi trang tính dưới dạng Pandas DataFrames

Hình ảnh của tác giả

Bây giờ, nếu bạn muốn phân tích dữ liệu từ một trang tính cụ thể — chẳng hạn như từ trang tính “Tháng hai”, bạn chỉ cần thực hiện điều này

Hình ảnh của tác giả

Lưu ý rằng điều này trả về một đối tượng Pandas DataFrame

Hoặc nếu bạn muốn kết hợp dữ liệu trên nhiều trang tính, bạn có thể thực hiện việc này

Hình ảnh của tác giả

Ở đây, chúng tôi chỉ định pandas0 trong pandas1 để các chỉ số của DataFrame kết quả chạy theo trình tự

TL; DR

Tóm lại, đoạn mã đầy đủ sẽ trông như thế này

Hoặc ở định dạng mà bạn có thể tải xuống và lưu lại để tham khảo sau này

Hình ảnh của Tác giả sử dụng Carbon

Bây giờ, bạn có ít dòng mã hơn, đồng nghĩa với việc mã hiệu quả hơn và dễ đọc hơn

Trước khi tôi kết luận, hãy lưu ý sự khác biệt nhỏ này trong hàm pd.read_excel()

  • Đối với phiên bản của Pandas ≥ 0. 21. 0. pandas3
  • Đối với phiên bản Pandas <0. 21. 0. pandas4
Phần kết luận

Vậy là bạn đã có nó — một thủ thuật đơn giản để tải các tệp Excel có nhiều trang tính bằng Pandas. Tùy thuộc vào trường hợp sử dụng của bạn và loại tệp Excel mà bạn đang làm việc, cách tiếp cận này có thể tốt hơn hoặc không tốt hơn cách bạn đã quen thực hiện tác vụ này. Tuy nhiên, tôi hy vọng bài viết này sẽ giúp làm sáng tỏ thủ thuật tinh tế, ít được biết đến này và cung cấp cho bạn một phương pháp thay thế

👇️Bức ảnh này tóm tắt cảm giác của tôi sau khi đồng nghiệp của tôi dạy mẹo này cho tôi, vì vậy nếu bạn thấy nó cũng hữu ích, vui lòng cho tôi biết ý kiến ​​của bạn trong phần nhận xét

Ảnh của krakenimages trên Bapt

Đó là nó. Cảm ơn vì đã đọc

Trước khi bạn đi…

Nếu bài viết này có giá trị và bạn muốn hỗ trợ tôi với tư cách là một nhà văn, hãy cân nhắc đăng ký thành viên Medium. Là thành viên, bạn có quyền truy cập không giới hạn vào các câu chuyện được xuất bản trên Medium. Nếu bạn đăng ký bằng liên kết này, tôi sẽ kiếm được một khoản hoa hồng nhỏ. Vui lòng tham gia danh sách email của tôi nếu bạn muốn được thông báo bất cứ khi nào tôi xuất bản

Trong phần này, tôi sẽ trình bày cách sử dụng thư viện Pandas với Excel. Chúng tôi sẽ sử dụng các thao tác bảng excel cơ bản như tạo trang tính mới, thêm dữ liệu hàng loạt, nối thêm dữ liệu, đọc dữ liệu, định dạng dữ liệu và thêm biểu đồ

Cài đặt

Thực hiện các lệnh sau để cài đặt các thư viện Pandas, xlsxwriter, xlrd và openpyxl

pip install pandaspip install xlsxwriterpip install xlrdpip install openpyxl

Tạo một bảng tính Excel

import pandas as pdwriter = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')writer.close()

Mã này sẽ tạo một tệp

import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()
0 mới với trang tính mặc định có tên là
import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()
1

Bản trình diễn trống. xlsx với trang tính Sheet1

Thêm Dữ liệu Hàng loạt vào Trang tính Excel

import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()

Mã này sẽ thêm hai cột,

import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()
2 và
import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()
3, với dữ liệu vào
import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()
1 của
import pandas as pd

# dataframe Name and Age columns
df = pd.DataFrame({'Name': ['A', 'B', 'C', 'D'],
'Age': [10, 0, 30, 50]})

# Create a Pandas Excel writer using XlsxWriter as the engine.
writer = pd.ExcelWriter('demo.xlsx', engine='xlsxwriter')

# Convert the dataframe to an XlsxWriter Excel object.
df.to_excel(writer, sheet_name='Sheet1', index=False)

# Close the Pandas Excel writer and output the Excel file.
writer.close()
0

Thêm dữ liệu hàng loạt vào trang tính excel

Đọc dữ liệu từ một trang tính Excel

import pandas as pdreader = pd.read_excel(r'demo.xlsx')print(reader)

Mã này sẽ in tất cả dữ liệu từ một bảng excel. Biến người đọc là một loại khung dữ liệu của Pandas

Name  Age
0 A 10
1 B 0
2 C 30
3 D 50

Nối dữ liệu vào cuối trang tính Excel

Mã này sẽ nối thêm dữ liệu vào cuối excel

Dữ liệu được thêm vào cuối excel

Thêm định dạng có điều kiện vào đầu ra

Chúng ta có thể định dạng ô bằng thư viện xlsxwriter

Đoạn mã trên sẽ thêm một màu khác cho các ô cột tuổi

Dữ liệu định dạng có điều kiện

Thêm biểu đồ vào đầu ra

Đoạn mã trên sẽ thêm biểu đồ vào trang tính Excel từ khung dữ liệu Pandas

Biểu đồ từ Pandas Dataframe

cảm ơn đã đọc bài viết này. Nếu bạn thích nó, hãy nhấp vào 👏 để xếp hạng nó trên 50 và cũng chia sẻ nó với bạn bè của bạn. Nó mang nhiều ý nghĩa với tôi

Làm cách nào để đọc bảng excel trong Python bằng gấu trúc?

Cách đọc nhiều trang tính từ một tệp Excel trong Pandas? .
nhập gấu trúc dưới dạng pd Sheet1=pd. read_excel('/content/Subject_Scores. xlsx', sheet_name=0) Sheet2=pd. read_excel('/content/Subject_Scores. xlsx', sheet_name=1) print("Trang tính 1. \n",Sheet1) print() print("Sheet1. \n",Trang tính 2)
Tờ1. Cuộn

Chúng ta có thể đọc tệp excel trong gấu trúc không?

Đọc tệp Excel vào DataFrame gấu trúc . Hỗ trợ các phần mở rộng tệp xls , xlsx , xlsm , xlsb , odf , ods và odt được đọ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.