[英]Read in xlsx in Pandas with openpyxl
根據我在網上閱讀的內容,Pandas read_excel function 已刪除對 xlsx 文件的支持,但應該很容易閱讀它們,但只需使用 openpyxl 引擎。
當我運行以下命令時,我收到一條錯誤消息,上面寫着“意外的關鍵字參數synchVertical
” 這是我的代碼:
pd.read_excel( path.join(data_dir,"opto_data.xlsx"), engine = 'openpyxl' )
這是我安裝的依賴項...
pandas-1.2.4
openpyxl-3.0.7
我剛剛意識到可能是新版本的 vs-code 破壞了它
嘗試這個
X = pd.ExcelFile("filename.xlsx")
df = X.parse("sheet name here")
它適用於引擎 xlrd 和 openpyxl 還安裝 xlrd 以獲得更好的體驗
pip install xlrd
An.xlsx 工作簿是 xml 文件的壓縮存檔。 根據API 參考,工作表的 xml 文件可以包含帶有屬性syncVertical
(沒有h
)的“工作表屬性”元素( <sheetPr>
)。 但是,在 Excel 中打開帶有syncVertical
的工作簿會導致錯誤,而synchVertical
工作正常。 其他軟件似乎遵循 Excel 創建具有“錯誤”拼寫的工作簿,而openpyxl
僅根據規范接受syncVertical
。
希望 openpyxl 將跟隨其他軟件接受錯誤拼寫屬性。 與此同時,修復是刪除該屬性。 這可以通過打開 Excel 中的工作簿並再次保存來手動完成,這似乎刪除了該屬性。 或者,我們可以調整此答案以編輯 zip 存檔。 不幸的是,它有點慢,因為它必須讀取和寫入整個檔案才能刪除這個屬性。 作為一個 hacky 快速解決方案,我們使用簡單的查找/替換來取出不需要的屬性。 更好但更慢的解決方案是正確解析 xml 文件。
import tempfile
from zipfile import ZipFile
import shutil
import os
from fnmatch import fnmatch
def change_in_zip(file_name, name_filter, change):
tempdir = tempfile.mkdtemp()
try:
tempname = os.path.join(tempdir, 'new.zip')
with ZipFile(file_name, 'r') as r, ZipFile(tempname, 'w') as w:
for item in r.infolist():
data = r.read(item.filename)
if fnmatch(item.filename, name_filter):
data = change(data)
w.writestr(item, data)
shutil.move(tempname, file_name)
finally:
shutil.rmtree(tempdir)
change_in_zip("opto_data.xlsx",
name_filter='xl/worksheets/*.xml', # the problematic property is found in the worksheet xml files
change=lambda d: d.replace(b' synchVertical="1"', b' '))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.