Python實(shí)現(xiàn)讀取HTML表格 pd.read_html()
Python讀取HTML表格
數(shù)據(jù)部門(mén)提供的數(shù)據(jù)是xls格式的文件,但是執(zhí)行讀取xls文件的腳本報(bào)錯(cuò)。
xlrd報(bào)錯(cuò):
xlrd.biffh.XLRDError: Unsupported format, or corrupt file: Expected BOF record; found b'<html xm'
讀取xlrd的腳本
data_lines = read_excel_file(self.file_path)
def read_excel_file(file_path):
"""
讀取excel文件
"""
import xlrd
print('[Info] excel file: {}'.format(file_path))
book = xlrd.open_workbook(file_path)
sheet = book.sheet_by_index(0)
data_lines = []
for row in range(0, sheet.nrows):
line_data = []
for column in range(0, sheet.ncols):
val = sheet.cell(row, column).value
line_data.append(val)
data_lines.append(line_data)
return data_lines # 二維數(shù)組原因是文件格式是HTML表格,參考python xlrd unsupported format, or corrupt file.
使用pandas的read_html讀取文件,同時(shí)替換nan為空字符,數(shù)據(jù)格式保持一致。
def read_html_table(file_path): ? ? """ ? ? 讀取html表格 ? ? """ ? ? import pandas as pd ? ? pd_table = pd.read_html(file_path) ? ? df = pd_table[0] ? ? # num_col = df.shape[1] ? ? # num_row = df.shape[0] ? ? df_data = df.values.tolist() ? ? df_data = df_data[1:] ? ? for r_idx, row in enumerate(df_data): ? ? ? ? for c_idx, value in enumerate(row): ? ? ? ? ? ? # 判斷nan,參考https://stackoverflow.com/questions/944700/how-can-i-check-for-nan-values ? ? ? ? ? ? if value != value: ? ? ? ? ? ? ? ? df_data[r_idx][c_idx] = "" ? ? return df_data
讀取問(wèn)題解決。
pd.read_html讀取數(shù)據(jù)不完整問(wèn)題
問(wèn)題:有一個(gè)較大的表格數(shù)據(jù)存在了html中,打算用read_html直接取出來(lái)這部分?jǐn)?shù)據(jù),但后來(lái)發(fā)現(xiàn)read_html讀取的數(shù)據(jù)不完整,后來(lái)檢查html的table都沒(méi)有任何問(wèn)題
解決辦法
pd.read_html的默認(rèn)解析器為 'lxml' ,添加參數(shù)flavor='bs4'便可解決
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Python中range()與xrange()的區(qū)別
range()?和?xrange()?是兩個(gè)函數(shù),可用于在?Python的?for?循環(huán)中迭代一定次數(shù)。本文將通過(guò)示例詳細(xì)說(shuō)說(shuō)二者的區(qū)別與使用,需要的可以參考一下2022-09-09
Python 多線(xiàn)程超詳細(xì)到位總結(jié)
線(xiàn)程在程序中是獨(dú)立的、并發(fā)的執(zhí)行流。與分隔的進(jìn)程相比,進(jìn)程中線(xiàn)程之間的隔離程度要小,它們共享內(nèi)存、文件句柄和其他進(jìn)程應(yīng)有的狀態(tài)。線(xiàn)程的劃分尺度小于進(jìn)程,使多線(xiàn)程程序的并發(fā)性高。進(jìn)程在執(zhí)行過(guò)程中擁有獨(dú)立內(nèi)存單元,而多個(gè)線(xiàn)程共享內(nèi)存,從而提升程序運(yùn)行效率2021-11-11
Python中def()函數(shù)的實(shí)戰(zhàn)練習(xí)題
def是define的縮寫(xiě),用來(lái)自定義函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python中def()函數(shù)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-07-07
python實(shí)現(xiàn)二叉樹(shù)的遍歷
這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)二叉樹(shù)的遍歷,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12
python簡(jiǎn)單實(shí)現(xiàn)獲取當(dāng)前時(shí)間
最近項(xiàng)目中經(jīng)常需要python去取當(dāng)前的時(shí)間,雖然不是很難,但是老是忘記,用一次丟一次,為了能夠更好的記住,我今天特意寫(xiě)下python 當(dāng)前時(shí)間這篇文章,如果你覺(jué)的對(duì)你有用的話(huà),可以收藏下。2016-08-08
python實(shí)現(xiàn)網(wǎng)站用戶(hù)名密碼自動(dòng)登錄功能
最近接到這樣的需求通過(guò)網(wǎng)頁(yè)用戶(hù)認(rèn)證登錄實(shí)現(xiàn)上網(wǎng),如何實(shí)現(xiàn)網(wǎng)站自動(dòng)登錄功能呢,接下來(lái)小編給大家?guī)?lái)了python實(shí)現(xiàn)網(wǎng)站用戶(hù)名密碼自動(dòng)登錄功能,需要的朋友可以參考下2019-08-08
Python可視化學(xué)習(xí)之seaborn調(diào)色盤(pán)
seaborn是在matplotlib基礎(chǔ)上封裝的,所以matplotlib的調(diào)色盤(pán)seaborn都可以使用。本文系統(tǒng)介紹seaborn調(diào)色盤(pán),相較于matplotlib,有諸多不同,需要的可以參考一下2022-02-02
pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法
今天小編就為大家分享一篇pytorch 在網(wǎng)絡(luò)中添加可訓(xùn)練參數(shù),修改預(yù)訓(xùn)練權(quán)重文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-08-08

