Pandas nhiều trang tính sang Excel

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 Dict

gấ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à DataFrame

Tham 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ên

Cù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ố 8

Và 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

pandas có đọc được file excel nhiều sheet không?

tham số sheet_name trên pandas. 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 Dict.

Bạn sẽ nhập nhiều trang excel vào một khung dữ liệu như thế nào?

Nhận danh sách tên của tất cả các trang tính, sử dụng openpyxl hoặc pandas. 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. Hợp nhất tất cả vào một DataFrame duy nhất bằng cách sử dụng pd. concat

Chủ Đề