Hướng dẫn read multiple excel files in python - đọc nhiều tệp excel trong python

Như đã đề cập trong các bình luận, một lỗi bạn đang mắc phải là bạn đang lặp qua một danh sách trống.

Đây là cách tôi sẽ làm điều đó, sử dụng một ví dụ về có 5 tệp Excel giống hệt nhau được thêm vào từng tệp khác.

(1) Nhập khẩu:

import os
import pandas as pd

(2) Tệp danh sách:

path = os.getcwd()
files = os.listdir(path)
files

Output:

['.DS_Store',
 '.ipynb_checkpoints',
 '.localized',
 'Screen Shot 2013-12-28 at 7.15.45 PM.png',
 'test1 2.xls',
 'test1 3.xls',
 'test1 4.xls',
 'test1 5.xls',
 'test1.xls',
 'Untitled0.ipynb',
 'Werewolf Modelling',
 '~$Random Numbers.xlsx']

(3) Chọn các tệp 'XLS':

files_xls = [f for f in files if f[-3:] == 'xls']
files_xls

Output:

['test1 2.xls', 'test1 3.xls', 'test1 4.xls', 'test1 5.xls', 'test1.xls']

(4) Khởi tạo DataFrame trống:

df = pd.DataFrame()

(5) Vòng lặp qua danh sách các tệp để nối với DataFrame trống:

for f in files_xls:
    data = pd.read_excel(f, 'Sheet1')
    df = df.append(data)

(6) Tận hưởng DataFrame mới của bạn. :-)

df

Output:

  Result  Sample
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10
0      a       1
1      b       2
2      c       3
3      d       4
4      e       5
5      f       6
6      g       7
7      h       8
8      i       9
9      j      10

Đúng, đơn giản như vậy! Hãy đi qua điều này. Bằng cách chỉ định trang_name = không có trong pd. hàm read_excel (), bạn nhận được một từ điển của các khung dữ liệu gấu trúc, trong đó các khóa là tên của bảng tính và các giá trị là dữ liệu trong mỗi bảng tính là các khung dữ liệu gấu trúc.

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

OpenPyXL là một thư viện Python được tạo để đọc và viết các tệp Excel 2010 XLSX/XLSM/XLTX/XLTM. Nó có thể đọc cả hai. XLSX và. Các định dạng tệp XLSM, bao gồm hỗ trợ biểu đồ, biểu đồ và trực quan hóa dữ liệu khác.

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 bảng tính và tải chúng vào Python bằng cách sử dụng gấu trúc cho nhiều nhiệm vụ. Tôi thấy quá trình này khá cồng kềnh, cho đến khi một đồng nghiệp đồng nghiệp (cảm ơn Gab Lin!) Đã dạy tôi một mẹo đơn giản mà từ đó cho phép tôi thực hiện nhiệm vụ này bằng trực giác 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 đến mấu chốt, trước tiên hãy nhìn vào tệp Excel sau mà tôi đã tạo và sẽ sử dụng để minh họa.

Tệp Excel với nhiều bảng 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 bảng tính với nhau thành một khung dữ liệu gấu trúc duy nhất. Để đạt được nhiệm vụ này, tôi đã từng làm như sau:

  1. Nhận một danh sách tên của tất cả các bảng tính, bằng cách sử dụng openpyxl hoặc
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    0.
  2. Lặp lại thông qua mỗi bảng tính, phân tích từng tờ dưới dạng DataFrame của gấu trúc và nối mỗi khung dữ liệu vào danh sách khác.
  3. Hợp nhất tất cả vào một khung dữ liệu duy nhất bằng cách sử dụng
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    1.

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 vài vấn đề với phương pháp này:

  • Bạn có ít nhất 8 dòng mã để thực hiện một nhiệm vụ đơn giản, khá kém hiệu quả., which is quite inefficient.
  • Bạn có thể chỉ cần tải tệp Excel vào Python mà không biết trước tên của bảng tính. 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 bảng tính trước khi bạn chỉ định đối số
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    2 tương ứng trong hàm
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    3.
    without first knowing the names of the worksheets. You need a bit of reverse-engineering — you first need to figure out the names of the worksheets before you specify the
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    2 argument accordingly in the
    path = os.getcwd()
    files = os.listdir(path)
    files
    
    3 function.
  • Bạn cần chỉ định tên chính xác của (các) bảng 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 bảng tính hoặc nếu tên của bảng tính đơn giản, nhưng điều này dễ bị lỗi nếu bạn có nhiều bảng tính hoặc nếu tên bảng tính phức tạp. you wish to load. This may be straightforward if you are loading data from a single worksheet or if the name of the worksheet is simple, but this is prone to errors if you have multiple worksheets or if the worksheet names are complicated.

Bí quyết

Bây giờ, để giải quyết các vấn đề này, ở đây, thủ thuật - chỉ cần chỉ định đối số

path = os.getcwd()
files = os.listdir(path)
files
2 là
path = os.getcwd()
files = os.listdir(path)
files
5 trong hàm
path = os.getcwd()
files = os.listdir(path)
files
3. Đúng, đơn giản như vậy! Hãy để đi bộ qua điều này.

Bằng cách chỉ định

path = os.getcwd()
files = os.listdir(path)
files
7 trong hàm
path = os.getcwd()
files = os.listdir(path)
files
3, bạn sẽ nhận được từ điển của các khung dữ liệu gấu trúc, trong đó các khóa là tên của bảng tính và các giá trị là dữ liệu trong mỗi bảng tính là 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 bảng tính cụ thể - giả sử, từ bảng tính của tháng hai, bạn có thể chỉ cần làm điều này:

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 bảng tính cụ thể - giả sử, từ bảng tính của tháng hai, bạn có thể chỉ cần làm điều này:

Lưu ý rằng điều này trả về một đối tượng DataFrame của gấu trúc.

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 bảng tính cụ thể - giả sử, từ bảng tính của tháng hai, bạn có thể chỉ cần làm điều này:

TL;DR

Lưu ý rằng điều này trả về một đối tượng DataFrame của gấu trúc.

Hoặc nếu bạn muốn kết hợp dữ liệu trên nhiều bảng tính, bạn có thể làm điều này:

Ở đây, chúng tôi chỉ định
path = os.getcwd()
files = os.listdir(path)
files
9 trong
['.DS_Store',
 '.ipynb_checkpoints',
 '.localized',
 'Screen Shot 2013-12-28 at 7.15.45 PM.png',
 'test1 2.xls',
 'test1 3.xls',
 'test1 4.xls',
 'test1 5.xls',
 'test1.xls',
 'Untitled0.ipynb',
 'Werewolf Modelling',
 '~$Random Numbers.xlsx']
0 để các chỉ số của DataFrame kết quả chạy theo trình tự.

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 để tham khảo trong tương lai:

  • Hình ảnh của tác giả sử dụng carbon
  • Bây giờ, bạn có ít dòng mã hơn, cũng chuyển thành mã hiệu quả và dễ đọc hơn.

Trước khi tôi kết luận, hãy lưu ý về sự khác biệt nhỏ này trong hàm path = os.getcwd() files = os.listdir(path) files 3:

Đối với phiên bản Pandas, ≥ 0,21.0:

['.DS_Store',
 '.ipynb_checkpoints',
 '.localized',
 'Screen Shot 2013-12-28 at 7.15.45 PM.png',
 'test1 2.xls',
 'test1 3.xls',
 'test1 4.xls',
 'test1 5.xls',
 'test1.xls',
 'Untitled0.ipynb',
 'Werewolf Modelling',
 '~$Random Numbers.xlsx']
2

Cho phiên bản Pandas, <0,21.0:

['.DS_Store',
 '.ipynb_checkpoints',
 '.localized',
 'Screen Shot 2013-12-28 at 7.15.45 PM.png',
 'test1 2.xls',
 'test1 3.xls',
 'test1 4.xls',
 'test1 5.xls',
 'test1.xls',
 'Untitled0.ipynb',
 'Werewolf Modelling',
 '~$Random Numbers.xlsx']
3

Sự kết luận

Vì vậy, bạn có nó - một mẹo đơn giản để tải các tệp Excel với nhiều bảng tính bằng gấu trúc! Tùy thuộc vào trường hợp sử dụng của bạn và loại tệp Excel bạn đang làm việc, phương pháp này có thể hoặc không tốt hơn cách bạn quen làm nhiệm 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ỏ mẹo 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ổng hợp 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 cũng thấy nó hữu ích, hãy thoải mái đưa cho tôi những lời bình luận của bạn trong các bình luận!

Ảnh của Krakenimages trên unplash

Làm thế nào đọc nhiều tệp excel trong Python?

Approach:..
Nhập các gói Python cần thiết như Gandas, Glob và OS ..
Sử dụng gói Glob Python để truy xuất các tệp/tên đường dẫn khớp với một mẫu được chỉ định, tức là '. xlsx '.
Vòng lặp qua danh sách các tệp excel, đọc tệp đó bằng gấu trúc. ....
Chuyển đổi từng tệp Excel thành DataFrame ..
Hiển thị vị trí, tên và nội dung của nó ..

Làm cách nào để chuyển đổi nhiều tệp Excel thành CSV trong Python?

Đọc nội dung tệp excel đã cho bằng hàm pandas read_excel () (đọc một đối tượng tệp excel vào đối tượng khung dữ liệu). Chuyển đổi tệp excel thành tệp CSV bằng hàm TO_CSV () (chuyển đổi đối tượng thành tệp CSV) bằng cách chuyển tên tệp Excel đầu ra, INDEX là không có và tiêu đề đúng như các đối số.Convert the excel file into a CSV file using the to_csv() function(converts object into a CSV file) by passing the output excel file name, index as None, and header as true as arguments.

Pandas có thể đọc nhiều tấm excel không?

Đúng, đơn giản như vậy!Hãy đi qua điều này.Bằng cách chỉ định trang_name = không có trong pd.hàm read_excel (), bạn nhận được một từ điển của các khung dữ liệu gấu trúc, trong đó các khóa là tên của bảng tính và các giá trị là dữ liệu trong mỗi bảng tính là các khung dữ liệu gấu trúc.

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

OpenPyXL là một thư viện Python được tạo để đọc và viết các tệp Excel 2010 XLSX/XLSM/XLTX/XLTM.Nó có thể đọc cả hai.XLSX và.Các định dạng tệp XLSM, bao gồm hỗ trợ biểu đồ, biểu đồ và trực quan hóa dữ liệu khác.. It can read both the . xlsx and . xlsm file formats, which includes support for charts, graphs, and other data visualizations.