Phiên bản mới của Pandas sử dụng giao diện sau để tải các tệp Excel:
read_excel['path_to_file.xls', 'Sheet1', index_col=None, na_values=['NA']]
Nhưng nếu tôi không biết các tấm có sẵn?
Ví dụ: tôi đang làm việc với các tệp Excel mà các tờ sau
Dữ liệu 1, Dữ liệu 2 ..., Dữ liệu N, Foo, Bar
Nhưng tôi không biết
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
1 một tiên nghiệm.Có cách nào để có được danh sách các tờ từ một tài liệu Excel trong Pandas không?
Denfromufa
5.74412 Huy hiệu vàng73 Huy hiệu bạc138 Huy hiệu đồng12 gold badges73 silver badges138 bronze badges
Đã hỏi ngày 31 tháng 7 năm 2013 lúc 17:57Jul 31, 2013 at 17:57
Bạn vẫn có thể sử dụng lớp Excelfile [và thuộc tính
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
2]:xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
Xem Docs cho Parse để biết thêm các tùy chọn ...
Đã trả lời ngày 31 tháng 7 năm 2013 lúc 18:01Jul 31, 2013 at 18:01
Andy Haydenandy HaydenAndy Hayden
339K96 Huy hiệu vàng604 Huy hiệu bạc523 Huy hiệu Đồng96 gold badges604 silver badges523 bronze badges
3
Bạn nên chỉ định rõ ràng tham số thứ hai [trang tính] là không có. như thế này:
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
"DF" là tất cả các tờ như một từ điển của DataFrames, bạn có thể xác minh nó bằng cách chạy điều này:
df.keys[]
Kết quả như thế này:
[u'201610', u'201601', u'201701', u'201702', u'201703', u'201704', u'201705', u'201706', u'201612', u'fund', u'201603', u'201602', u'201605', u'201607', u'201606', u'201608', u'201512', u'201611', u'201604']
Vui lòng tham khảo Pandas DOC để biết thêm chi tiết: //pandas.pydata.org/pandas-docs/stable/generated/pandas.read_excel.html
Đã trả lời ngày 10 tháng 8 năm 2017 lúc 1:59Aug 10, 2017 at 1:59
3
Đây là cách nhanh nhất tôi đã tìm thấy, lấy cảm hứng từ câu trả lời của @Divingtobi. Tất cả các câu trả lời dựa trên XLRD, OpenPyXL hoặc Pandas đều chậm đối với tôi, vì tất cả chúng đều tải toàn bộ tệp trước.
from zipfile import ZipFile
from bs4 import BeautifulSoup # you also need to install "lxml" for the XML parser
with ZipFile[file] as zipped_file:
summary = zipped_file.open[r'xl/workbook.xml'].read[]
soup = BeautifulSoup[summary, "xml"]
sheets = [sheet.get["name"] for sheet in soup.find_all["sheet"]]
Đã trả lời ngày 6 tháng 9 năm 2019 lúc 21:10Sep 6, 2019 at 21:10
S.E.AS.E.AS.E.A
1211 Huy hiệu bạc3 Huy hiệu đồng1 silver badge3 bronze badges
Cách dễ nhất để truy xuất các tên trang tính từ một excel [xls., Xlsx] là:
tabs = pd.ExcelFile["path"].sheet_names
print[tabs]
Sau đó, để đọc và lưu trữ dữ liệu của một tờ cụ thể [giả sử, tên trang tính là "Sheet1", "Sheet2", v.v.], nói "Sheet2" chẳng hạn: ví dụ::
data = pd.read_excel["path", "Sheet2"]
print[data]
Đã trả lời ngày 12 tháng 8 năm 2021 lúc 20:13Aug 12, 2021 at 20:13
#It will work for Both '.xls' and '.xlsx' by using pandas
import pandas as pd
excel_Sheet_names = [pd.ExcelFile[excelFilePath]].sheet_names
#for '.xlsx' use only openpyxl
from openpyxl import load_workbook
excel_Sheet_names = [load_workbook[excelFilePath, read_only=True]].sheet_names
Suraj Rao
29.1k11 Huy hiệu vàng95 Huy hiệu bạc101 Huy hiệu đồng11 gold badges95 silver badges101 bronze badges
Đã trả lời ngày 7 tháng 12 năm 2021 lúc 11:58Dec 7, 2021 at 11:58
1
Tôi đã thử XLRD, Pandas, OpenPyXL và các thư viện khác như vậy và tất cả chúng dường như mất thời gian theo cấp số nhân khi kích thước tệp tăng lên khi đọc toàn bộ tệp. Các giải pháp khác được đề cập ở trên nơi họ đã sử dụng 'on_demand' không hiệu quả với tôi. Nếu bạn chỉ muốn lấy tên trang tính ban đầu, chức năng sau hoạt động cho các tệp XLSX.
def get_sheet_details[file_path]:
sheets = []
file_name = os.path.splitext[os.path.split[file_path][-1]][0]
# Make a temporary directory with the file name
directory_to_extract_to = os.path.join[settings.MEDIA_ROOT, file_name]
os.mkdir[directory_to_extract_to]
# Extract the xlsx file as it is just a zip file
zip_ref = zipfile.ZipFile[file_path, 'r']
zip_ref.extractall[directory_to_extract_to]
zip_ref.close[]
# Open the workbook.xml which is very light and only has meta data, get sheets from it
path_to_workbook = os.path.join[directory_to_extract_to, 'xl', 'workbook.xml']
with open[path_to_workbook, 'r'] as f:
xml = f.read[]
dictionary = xmltodict.parse[xml]
for sheet in dictionary['workbook']['sheets']['sheet']:
sheet_details = {
'id': sheet['@sheetId'],
'name': sheet['@name']
}
sheets.append[sheet_details]
# Delete the extracted files directory
shutil.rmtree[directory_to_extract_to]
return sheets
Vì tất cả XLSX về cơ bản là các tệp có khóa kéo, chúng tôi trích xuất dữ liệu XML cơ bản và đọc tên trang tính từ sổ làm việc trực tiếp mất một phần nhỏ so với các chức năng của thư viện.
Điểm chuẩn: [trên tệp xlsx 6MB với 4 tờ] Pandas, XLRD: 12 giây OpenPyxL: 24 giây Phương pháp đề xuất: 0,4 giây
Pandas, xlrd: 12 seconds
openpyxl: 24 seconds
Proposed method: 0.4 seconds
Vì yêu cầu của tôi chỉ là đọc các tên trang tính, chi phí không cần thiết của việc đọc toàn bộ thời gian đã làm tôi khó chịu nên tôi đã đi theo con đường này thay thế.
Đã trả lời ngày 27 tháng 5 năm 2019 lúc 5:43May 27, 2019 at 5:43
3
Xây dựng trên câu trả lời của @dhwanil_shah, bạn không cần phải trích xuất toàn bộ tệp. Với
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
3, có thể đọc trực tiếp từ một tệp bị nén.xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
0Hai
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
4 liên tiếp là xấu xí, nhưng nội dung chỉ nằm trong dòng thứ hai của văn bản. Không cần phải phân tích toàn bộ tập tin.Giải pháp này dường như nhanh hơn nhiều so với phiên bản
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
5 và rất có thể cũng nhanh hơn phiên bản trích xuất đầy đủ.Đã trả lời ngày 1 tháng 7 năm 2019 lúc 14:01Jul 1, 2019 at 14:01
DivingtobidivingtobidivingTobi
1.7888 Huy hiệu bạc18 Huy hiệu Đồng8 silver badges18 bronze badges
1
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
1Đối với một tệp Excel 5MB mà tôi đang làm việc,
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
6 mà không cần cờ df = pandas.read_excel["/yourPath/FileName.xlsx", None];
7 mất 8,24s. Với cờ df = pandas.read_excel["/yourPath/FileName.xlsx", None];
7, nó chỉ mất 39,6 ms. Nếu bạn vẫn muốn sử dụng thư viện Excel và không rơi vào giải pháp XML, thì nhanh hơn nhiều so với các phương thức phân tích toàn bộ tệp.Đã trả lời ngày 4 tháng 6 năm 2020 lúc 20:54Jun 4, 2020 at 20:54
flutefreak7flutefreak7flutefreak7
2.2213 huy hiệu vàng27 Huy hiệu bạc38 Huy hiệu đồng3 gold badges27 silver badges38 bronze badges
Nếu bạn:
- quan tâm đến hiệu suất
- Không cần dữ liệu trong tệp vào thời điểm thực thi.
- muốn đi với các thư viện thông thường so với việc lăn giải pháp của riêng bạn
Dưới đây đã được điểm chuẩn trên tệp ~ 10MB
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
9, df.keys[]
0.df.keys[]
1
df.keys[]
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
2Điểm chuẩn: ~ Cải thiện tốc độ 14 lần14x speed improvement
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
3df.keys[]
0
df.keys[]
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
4Điểm chuẩn: ~ Cải thiện tốc độ 56 lần56x speed improvement
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
5Notes:
- Đây là một tài nguyên tốt - //www.python-excel.org/
3 không còn được duy trì vào năm 2020df.keys[]
Đã trả lời ngày 9 tháng 11 năm 2020 lúc 21:24Nov 9, 2020 at 21:24
Glen Thompsonglen ThompsonGlen Thompson
8.0874 Huy hiệu vàng49 Huy hiệu bạc48 Huy hiệu đồng4 gold badges49 silver badges48 bronze badges
Với tùy chọn read_workbook, những gì trước đây được coi là một cuộc hành quyết được xem rõ ràng trong nhiều giây đã xảy ra với mili giây. Tuy nhiên, giải pháp vẫn có thể được cải thiện.
6xl = pd.ExcelFile['foo.xls'] xl.sheet_names # see all sheet names xl.parse[sheet_name] # read a specific sheet to DataFrame
Excelfile.parse mất cùng thời gian với việc đọc các XLS hoàn chỉnh theo thứ tự 10 giây của Sec. Kết quả này đã thu được với hệ điều hành Windows 10 với các phiên bản gói bên dưới
7xl = pd.ExcelFile['foo.xls'] xl.sheet_names # see all sheet names xl.parse[sheet_name] # read a specific sheet to DataFrame
Đã trả lời ngày 8 tháng 4 năm 2021 lúc 12:19Apr 8, 2021 at 12:19
Nếu bạn đọc tệp excel
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
8sau đó sử dụng
xl = pd.ExcelFile['foo.xls']
xl.sheet_names # see all sheet names
xl.parse[sheet_name] # read a specific sheet to DataFrame
9một biến thể khác
df = pandas.read_excel["/yourPath/FileName.xlsx", None];
0
Dominique
14.4K14 Huy hiệu vàng47 Huy hiệu bạc92 Huy hiệu đồng14 gold badges47 silver badges92 bronze badges
Đã trả lời ngày 10 tháng 8 năm 2021 lúc 5:12Aug 10, 2021 at 5:12