Đọc tệp Excel trong python bằng gấu trúc


144

Tôi đang cố đọc một tệp excel theo cách này:

newFile = pd.ExcelFile(PATH\FileName.xlsx)
ParsedData = pd.io.parsers.ExcelFile.parse(newFile)

Điều này đưa ra một lỗi cho biết hai đối số dự kiến, tôi không biết đối số thứ hai là gì và cũng là điều tôi đang cố gắng đạt được ở đây là chuyển đổi tệp Excel thành DataFrame, Tôi có đang thực hiện đúng cách không? hoặc có cách nào khác để làm điều này bằng cách sử dụng gấu trúc?

Câu trả lời:


222

Đóng: đầu tiên bạn gọi ExcelFile, nhưng sau đó bạn gọi .parsephương thức và truyền cho nó tên bảng.

>>> xl = pd.ExcelFile("dummydata.xlsx")
>>> xl.sheet_names
[u'Sheet1', u'Sheet2', u'Sheet3']
>>> df = xl.parse("Sheet1")
>>> df.head()
                  Tid  dummy1    dummy2    dummy3    dummy4    dummy5  \
0 2006-09-01 00:00:00       0  5.894611  0.605211  3.842871  8.265307   
1 2006-09-01 01:00:00       0  5.712107  0.605211  3.416617  8.301360   
2 2006-09-01 02:00:00       0  5.105300  0.605211  3.090865  8.335395   
3 2006-09-01 03:00:00       0  4.098209  0.605211  3.198452  8.170187   
4 2006-09-01 04:00:00       0  3.338196  0.605211  2.970015  7.765058   

     dummy6  dummy7    dummy8    dummy9  
0  0.623354       0  2.579108  2.681728  
1  0.554211       0  7.210000  3.028614  
2  0.567841       0  6.940000  3.644147  
3  0.581470       0  6.630000  4.016155  
4  0.595100       0  6.350000  3.974442  

Những gì bạn đang làm là gọi phương thức sống trên chính lớp đó, chứ không phải là cá thể, cũng không sao (mặc dù không phải là rất thành ngữ), nhưng nếu bạn đang làm điều đó, bạn cũng cần phải vượt qua tên trang tính:

>>> parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")
>>> parsed.columns
Index([u'Tid', u'dummy1', u'dummy2', u'dummy3', u'dummy4', u'dummy5', u'dummy6', u'dummy7', u'dummy8', u'dummy9'], dtype=object)

6
Khi tôi sử dụng "df = xl.parse (" Sheet1 ")", nó sẽ tự động lấy giá trị của ô đầu tiên của mỗi cột làm tên cột của dataframe, làm cách nào để chỉ định tên cột của riêng tôi?
Rakesh Adhikeaj

2
Trong gấu trúc 15.0.2, parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")không hoạt động và ném lỗi module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")làm việc cho tôi
Neil

Đẹp. Điều này gần như gọn gàng như cách truy cập cùng một tab bằng cách sử dụng openpyxl. Là gấu trúc gọi openpyxl dưới mui xe?
Pyderman

2
Làm thế nào để bạn ngăn chặn nó biến hàng đầu tiên thành tiêu đề? Tôi đã thử sử dụng tham số headers=Nonenhưng trong khi nó không phá vỡ mã, nó cũng không hoạt động.
Elliptica

8
Tôi phát hiện ra rằng pip install xlrd là cần thiết để nó hoạt động. Gói xlrd không đi kèm với gấu trúc, vì vậy nếu bạn không cài đặt nó cho một số mục đích khác, bạn sẽ nhận được ngoại lệ "ImportError: Không có mô-đun có tên xlrd". Đúng như gấu trúc 0.19.0 trên Mac, ở mọi mức độ.
dùng5920660

95

Đây là cách đơn giản và dễ dàng.

import pandas
df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname='Sheet 1')
# or using sheet index starting 0
df = pandas.read_excel(open('your_xls_xlsx_filename','rb'), sheetname=2)

xem tài liệu đầy đủ chi tiết http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: sheetnameTừ khóa không được dùng cho các phiên bản Pandas mới hơn, sheet_namethay vào đó hãy sử dụng .


20

Tôi nghĩ rằng tôi nên thêm vào đây, rằng nếu bạn muốn truy cập các hàng hoặc cột để lặp qua chúng, bạn làm điều này:

import pandas as pd

# open the file
xlsx = pd.ExcelFile(PATH\FileName.xlsx)

# get the first sheet as an object
sheet1 = xlsx.parse(0)

# get the first column as a list you can loop through
# where the is 0 in the code below change to the row or column number you want    
column = sheet1.icol(0).real

# get the first row as a list you can loop through
row = sheet1.irow(0).real

Biên tập:

Các phương pháp icol(i)irow(i)không được chấp nhận ngay bây giờ. Bạn có thể sử dụng sheet1.iloc[:,i]để lấy col thứ i và sheet1.iloc[i,:]để lấy hàng thứ i.


13

Tôi nghĩ rằng điều này sẽ đáp ứng nhu cầu của bạn:

import pandas as pd

# Read the excel sheet to pandas dataframe
DataFrame = pd.read_excel("PATH\FileName.xlsx", sheetname=0)

0

Bạn chỉ cần cung cấp đường dẫn đến tệp của bạn để pd.read_excel

import pandas as pd

file_path = "./my_excel.xlsx"
data_frame = pd.read_excel(file_path)

Kiểm tra tài liệu để khám phá các tham số như skiprowsbỏ qua các hàng khi tải excel



Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.