Membaca file Excel dengan python menggunakan panda

144

Saya mencoba membaca file excel dengan cara ini:

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

yang melempar kesalahan yang mengatakan dua argumen yang diharapkan, saya tidak tahu apa argumen kedua dan apa yang saya coba capai di sini adalah untuk mengkonversi file Excel ke DataFrame, Apakah saya melakukannya dengan cara yang benar? atau adakah cara lain untuk melakukan ini menggunakan panda?

Rakesh Adhikesavan
sumber

Jawaban:

223

Tutup: pertama Anda menelepon ExcelFile, tetapi kemudian Anda memanggil .parsemetode dan memberikannya nama lembar.

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

Apa yang Anda lakukan adalah memanggil metode yang hidup di kelas itu sendiri, daripada contohnya, yang tidak apa-apa (walaupun tidak terlalu idiomatis), tetapi jika Anda melakukannya Anda juga harus memasukkan nama lembar:

>>> 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)
DSM
sumber
6
ketika saya menggunakan "df = xl.parse (" Sheet1 ")" secara otomatis mengambil nilai sel pertama dari setiap kolom sebagai nama kolom dataframe, bagaimana cara menentukan nama kolom saya sendiri?
Rakesh Adhikesavan
2
Di panda 15.0.2, parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1")tidak berfungsi dan melempar kesalahan module object has no attribute ExcelFile. parsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")bekerja untuk saya
Neil
Bagus. Ini hampir sama rapi dengan cara mengakses tab yang sama dengan menggunakan openpyxl. Apakah panda memanggil openpyxl di bawah tenda?
Pyderman
2
Bagaimana Anda mencegahnya mengubah baris pertama menjadi header? Saya sudah mencoba menggunakan parameter headers=Nonetetapi sementara itu tidak memecahkan kode, tidak berhasil juga.
Elliptica
8
Saya menemukan bahwa instalasi pip xlrd diperlukan agar ini berfungsi. Paket xlrd tidak disertai dengan panda, jadi jika Anda tidak menginstalnya untuk tujuan lain, Anda akan mendapatkan pengecualian "ImportError: No module bernama xlrd". Benar pada panda 0.19.0 di Mac, bagaimanapun juga.
user5920660
95

Ini cara yang sangat sederhana dan mudah.

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)

lihat dokumentasi detail lengkap http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: Kata sheetnamekunci tidak digunakan lagi untuk versi Pandas yang lebih baru, gunakan sheet_namesaja.

Murali Mopuru
sumber
20

Kupikir saya harus menambahkan di sini, bahwa jika Anda ingin mengakses baris atau kolom untuk mengulanginya, Anda melakukan ini:

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

Edit:

Metode icol(i)dan irow(i)sudah usang sekarang. Anda dapat menggunakan sheet1.iloc[:,i]untuk mendapatkan kolom ke-i dan sheet1.iloc[i,:]untuk mendapatkan baris ke-ke-i.

Dr Manhattan
sumber
13

Saya pikir ini harus memuaskan kebutuhan Anda:

import pandas as pd

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

Anda hanya perlu memberi makan jalur ke file Anda pd.read_excel

import pandas as pd

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

Periksa dokumentasi untuk menjelajahi parameter ingin skiprowsmengabaikan baris saat memuat excel

ted
sumber
0
import pandas as pd

data = pd.read_excel (r'**YourPath**.xlsx')

print (data)
Suthura Sudharaka
sumber
0

Berikut adalah metode yang diperbarui dengan sintaksis yang lebih umum dalam kode python. Ini juga mencegah Anda membuka file yang sama beberapa kali.

import pandas as pd

sheet1, sheet2 = None, None
with pd.ExcelFile("PATH\FileName.xlsx") as reader:
    sheet1 = pd.read_excel(reader, sheet_name='Sheet1')
    sheet2 = pd.read_excel(reader, sheet_name='Sheet2')

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_excel.html

Quinn
sumber