pandas讀取Excel異常處理

筆者最近接收到了一批數(shù)據(jù),需要將處理并轉(zhuǎn)存為.npy格式以方便在工程上應(yīng)用。


數(shù)據(jù)文件

這些文件乍一看以為是Excel的文件,因此筆者就想使用pandas來(lái)完成轉(zhuǎn)換,但是,在使用pandas的read_excel時(shí),卻出現(xiàn)了如下的錯(cuò)誤。

xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<meta ht'

經(jīng)過(guò)筆者多方搜索,發(fā)現(xiàn)這是由于我們的.xls文件并不是標(biāo)準(zhǔn)的Excel文件,標(biāo)準(zhǔn)的Excel文件用文本編輯器打開應(yīng)該是一堆亂碼或一堆16進(jìn)制數(shù)字(因?yàn)镋xcel的存儲(chǔ)格式是二進(jìn)制格式)


Sublime打開標(biāo)準(zhǔn)Excel文件

但是筆者收到的類似Excel的文件其實(shí)是一種標(biāo)簽格式


由于這種標(biāo)簽和HTML的很像,因此筆者的思路就是先將其轉(zhuǎn)換為HTML格式,然后在用pandas的read_html讀取其中的表格,從而完成數(shù)據(jù)處理。

import pandas as pd
import numpy as np
from bs4 import BeautifulSoup
import os

first_dir = "F:\新建文件夾" #打開初始文件夾
first_dirlist = os.listdir(first_dir) #遍歷文件夾下所有文件夾

for filename in first_dirlist:
    sec_filelist = os.listdir(first_dir + "\\"+filename)
    outdata = pd.DataFrame() #初始化數(shù)據(jù)
    #建立表頭
    outdata = outdata.append([["數(shù)據(jù)時(shí)間","潮位(cm)","雨量(mm)","水溫(℃)","鹽度","濕度(%)","氣壓(hPa)","氣溫(℃)","風(fēng)速(m/s)","風(fēng)向(°)","能見度(km)","輻射(μmol/㎡·s)"]])
    print("正在打開"+filename+"文件夾")
    for i in range(31):
        name = str(i)+".xls"
        if name in sec_filelist:
            print("正在處理"+name)
            #讀取非標(biāo)準(zhǔn)格式的.xls文件
            realfile = first_dir + "\\"+filename+"\\"+name
            htmlfile = open(realfile, 'r')
            htmlhandle = htmlfile.read()
            #將.xls文件轉(zhuǎn)換為HTML格式
            soup = BeautifulSoup(htmlhandle, 'lxml')
            outhtml = open(str(i)+".html", 'w')
            outhtml.write(str(soup))
            outhtml.close()
            #使用pandas的read_html讀取文本中的表格數(shù)據(jù)
            data = pd.read_html(str(i)+".html")
            outdata = outdata.append(data[0][1::60])
    np.save(filename, outdata) #存儲(chǔ)為.npy格式
    print("輸出文件"+filename+".npy")

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容