อ่านไฟล์ Excel ในไพ ธ อนโดยใช้นุ่น


144

ฉันพยายามอ่านไฟล์ excel ด้วยวิธีนี้:

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

ข้อผิดพลาดข้อใดที่ระบุข้อโต้แย้งสองข้อที่คาดว่าจะเกิดขึ้นฉันไม่ทราบว่าข้อโต้แย้งที่สองคืออะไรและสิ่งที่ฉันพยายามบรรลุที่นี่คือการแปลงไฟล์ Excel เป็น DataFrame ฉันกำลังทำอย่างถูกต้องหรือไม่ หรือมีวิธีอื่นในการทำเช่นนี้โดยใช้แพนด้า

คำตอบ:


223

ปิด: ก่อนอื่นให้คุณโทรExcelFileแต่หลังจากนั้นให้คุณเรียก.parseวิธีการและส่งผ่านชื่อแผ่นงาน

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

สิ่งที่คุณกำลังทำคือการเรียกใช้วิธีการที่อาศัยอยู่ในชั้นเรียนของตัวเองมากกว่าตัวอย่างซึ่งก็โอเค (แม้ว่าจะไม่เป็นสำนวนมาก) แต่ถ้าคุณทำเช่นนั้นคุณจะต้องผ่านชื่อแผ่นงาน:

>>> 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
เมื่อฉันใช้ "df = xl.parse (" Sheet1 ")" มันจะรับค่าของเซลล์แรกของแต่ละคอลัมน์โดยอัตโนมัติเป็นชื่อคอลัมน์ของ dataframe ฉันจะระบุชื่อคอลัมน์ของตัวเองได้อย่างไร
Rakesh Adhikesavan

2
ในหมีแพนด้า 15.0.2, ไม่ทำงานและโยนข้อผิดพลาด parsed = pd.io.parsers.ExcelFile.parse(xl, "Sheet1") ใช้งานได้สำหรับฉันmodule object has no attribute ExcelFileparsed = pd.io.excel.ExcelFile.parse(xl, "Sheet1")
Neil

ดี openpyxlนี่คือเกือบจะเป็นที่เรียบร้อยเป็นวิธีการเข้าถึงเดียวกันของแท็บจะประสบความสำเร็จโดยใช้ แพนด้ากำลังเรียก openpyxl อยู่ใต้ฝากระโปรงหรือไม่?
Pyderman

2
คุณจะป้องกันไม่ให้มันเปลี่ยนแถวแรกเป็นส่วนหัวได้อย่างไร ฉันพยายามใช้พารามิเตอร์headers=Noneแต่ในขณะที่มันไม่ได้ทำลายรหัสก็ไม่ได้ทำงานอย่างใดอย่างหนึ่ง
Elliptica

8
ฉันค้นพบว่าจำเป็นต้องติดตั้ง pip xlrdเพื่อให้สิ่งนี้ทำงานได้ แพ็คเกจ xlrd ไม่ได้มาพร้อมกับแพนด้าดังนั้นหากคุณไม่ได้ติดตั้งเพื่อวัตถุประสงค์อื่นคุณจะได้รับข้อยกเว้น "ImportError: ไม่มีโมดูลชื่อ xlrd" เป็นจริง ณ pandas 0.19.0 บน Mac ในอัตราใด ๆ
user5920660

95

นี่เป็นวิธีที่ง่ายและสะดวกมาก

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)

ตรวจสอบเอกสารรายละเอียดแบบเต็ม http://pandas.pydata.org/pandas-docs/version/0.17.1/generated/pandas.read_excel.html

FutureWarning: sheetnameคำหลักนั้นถูกคัดค้านสำหรับ Pandas เวอร์ชั่นใหม่ให้ใช้sheet_nameแทน


20

คิดว่าฉันควรเพิ่มที่นี่ว่าถ้าคุณต้องการเข้าถึงแถวหรือคอลัมน์เพื่อวนซ้ำพวกเขาคุณทำได้:

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

แก้ไข:

วิธีการicol(i)และirow(i)เลิกใช้แล้วในขณะนี้ คุณสามารถใช้sheet1.iloc[:,i]เพื่อรับ i-th col และsheet1.iloc[i,:]เพื่อรับ i-th แถว


13

ฉันคิดว่าสิ่งนี้ควรตอบสนองความต้องการของคุณ:

import pandas as pd

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

0

คุณเพียงแค่ต้องป้อนเส้นทางไปยังไฟล์ของคุณ pd.read_excel

import pandas as pd

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

ชำระเงินเอกสารประกอบเพื่อสำรวจพารามิเตอร์ที่ต้องการskiprowsละเว้นแถวเมื่อโหลด excel



0

นี่คือวิธีการอัพเดทพร้อมกับไวยากรณ์ที่พบได้บ่อยในรหัสหลาม นอกจากนี้ยังป้องกันไม่ให้คุณเปิดไฟล์เดียวกันหลายครั้ง

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.