Pandas có một vài hạn chế khi làm việc với nhiều trang tính trong tệp Excel. Tuy nhiên, có một thủ thuật nhỏ có thể giúp chúng tôi khắc phục những hạn chế này và làm việc với nhiều trang tính hiệu quả hơn
Một trong những thách thức khi làm việc với nhiều trang tính trong Pandas là theo dõi xem dữ liệu đến từ trang tính nào. Chúng tôi có thể giảm bớt vấn đề này bằng cách tạo một từ điển tên trang tính và DataFrames. Chúng ta có thể tham chiếu các trang tính theo tên thay vì nhớ số trang tính nào tương ứng với Khung dữ liệu nào
Có liên quan. Một cách tốt hơn để tóm tắt Pandas Dataframes
Một hạn chế khác khi làm việc với nhiều trang tính trong Pandas là hàm read_excel[] chỉ có thể đọc một trang tính tại một thời điểm. Nếu muốn đọc dữ liệu từ nhiều sheet khác nhau thì phải sử dụng hàm read_excel[] nhiều lần
Liên kết được Tài trợThủ thuật đọc file Excel nhiều sheet hiệu quả trong Pandas
Chúng ta có thể khắc phục hạn chế này bằng cách đặt đối số tên trang tính thành Không có trong hàm read_excel
df_dict = pd.read_excel['/path/to/exel.xlsx', sheet_name=None]
Hàm trên tạo một từ điển có tên trang tính trong tệp Excel dưới dạng khóa và khung dữ liệu dưới dạng giá trị. Bây giờ bạn có thể truy cập vào khung dữ liệu với tên trang tính của nó
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
df1 = df_dict.get['sheet1']
Kết hợp nhiều trang tính trong một tệp Excel bằng Pandas
Thông thường, các nhà khoa học và nhà phân tích dữ liệu nhận được các tệp excel có nhiều trang tính. Tuy nhiên, chúng chỉ là một phân vùng hợp lý của một tập dữ liệu lớn hơn trong hầu hết các trường hợp
Liên kết được Tài trợChẳng hạn, một tập dữ liệu được phân vùng theo tháng và được lưu trữ trong các trang riêng lẻ thay vì một tệp lớn
Cũng có thể kết hợp các trang tính trong tệp excel một cách thuận tiện bằng cách sử dụng phương thức giá trị của df_dict
df = pd.concat[df_dict.values[]]
Vui lòng không lặp lại tên trang tính để đọc chúng
Trước khi tôi học được thủ thuật này, trên thực tế, tôi đã xem qua các tên trang tính và đọc từng trang một. Đoạn mã để làm điều này sẽ giống như dưới đây
# Create an ExcelFile object by reading the file
f = pd.ExcelFile['path/to/excel.xlsx']
# Create a placeholder array to store the dataframes
dfs = []
# Iterate through each sheet's name
for sheet in f.sheet_names:
# Parse the sheet and convert it to a Pandas dataframe
df = f.parse[sheet]
# append it to our dataframes collection
dfs.append[df]
Mã này thực hiện công việc không gặp nhiều khó khăn. Tuy nhiên, chúng ta có thể loại bỏ các dòng mã bổ sung này bằng cách đặt sheetname=None khi đọc tệp
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
0 thông số về gấu trúc. read_excel[] dùng để đọc nhiều sheet từ excel. Điều này hỗ trợ đọc bảng excel theo tên hoặc vị trí. Khi bạn đọc nhiều trang tính, nó sẽ tạo ra một Dict của DataFrame, mỗi khóa trong Từ điển được biểu thị dưới dạng tên Trang tính và giá trị DF cho Dictgấu trúc Đọc nhiều trang tính trong Excel
Thông số
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
0 cũng lấy danh sách tên trang tính làm giá trị có thể được sử dụng để đọc nhiều trang tính vào DataFrame của gấu trúc. Không phải trong khi đọc nhiều trang tính, nó sẽ trả về Dict of DataFrame. Khóa trong Dict là tên trang tính và giá trị sẽ là DataFrameTham số này nhận các giá trị str, int, list hoặc None, mặc định 0. Khi sử dụng
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
2, nó sẽ đọc tất cả các trang từ excel. Theo mặc định, nó được đặt thành 0 có nghĩa là tờ đầu tiênCùng xem ví dụ nhé, mình có 1 file excel gồm 2 sheet tên là
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
3 và {
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
4
import pandas as pd
# Read excel file with sheet name
dict_df = pd.read_excel['c:/apps/courses_schedule.xlsx',
sheet_name=['Technologies','Schedule']]
Vì chúng tôi đang đọc hai trang tính từ excel, hàm này trả về Dict của DataFrame. Bạn có thể lấy DataFrames từ Dict như sau
# Get DataFrame from Dict
technologies_df = dict_df .get['Technologies']
schedule_df = df.get['Schedule']
# Print DataFrame's
print[technologies_df]
print[schedule_df]
Trang tính
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
3 được chuyển đổi thành DataFrame như sau. Lưu ý rằng các giá trị trống được chuyển đổi thành
# Get DataFrame from Dict
technologies_df = dict_df .get['Technologies']
schedule_df = df.get['Schedule']
# Print DataFrame's
print[technologies_df]
print[schedule_df]
0 trên DataFrame________số 8Và sheet
{
'sheet1': pd.DataFrame,
'sheet2': pd.DataFrame,
'sheet3': pd.DataFrame,
}
4 được convert thành DataFrame như sau
Courses Days Time
0 Spark MON, THU 7:00 AM to 9:00 AM
1 Pandas MON, WED 8:00 AM to 10:00 AM
2 Java WEN, FRI 7:00 PM to 9:00 PM
3 Python TUE, THU 6:00 PM to 8:00 PM
4 PHP WEN, THU 8:00 AM to 10:00 AM
Sự kết luận
Trong bài viết này, bạn đã học cách đọc một excel có nhiều trang tính và chuyển đổi nó thành DataFrame của gấu trúc. Vì nó trả về một Dict của DataFrame, nên bạn cũng đã học cách lấy từng DF từ dict