pandas讀取HTML和JSON數(shù)據(jù)的實(shí)現(xiàn)示例
Pandas是一個(gè)功能強(qiáng)大的數(shù)據(jù)分析庫(kù),它提供了許多靈活且高效的方法來(lái)處理和分析數(shù)據(jù)。本文將介紹如何使用Pandas讀取HTML數(shù)據(jù)和JSON數(shù)據(jù),并展示一些常見(jiàn)的應(yīng)用場(chǎng)景。
一、讀取HTML網(wǎng)頁(yè)
HTML(超文本標(biāo)記語(yǔ)言)是一種用于創(chuàng)建網(wǎng)頁(yè)的標(biāo)準(zhǔn)標(biāo)記語(yǔ)言。網(wǎng)頁(yè)通常由HTML標(biāo)簽和內(nèi)容組成,這些標(biāo)簽描述了網(wǎng)頁(yè)的結(jié)構(gòu)和樣式。在網(wǎng)頁(yè)上,數(shù)據(jù)可以以表格、列表或其他形式展示。Pandas可以讀取這些HTML數(shù)據(jù),并將其轉(zhuǎn)換為數(shù)據(jù)框,方便我們進(jìn)行進(jìn)一步的分析和處理。
1.讀取HTML數(shù)據(jù)
Pandas提供了一個(gè)函數(shù)read_html()
,可以直接從HTML文件或URL中讀取數(shù)據(jù)。下面是讀取HTML數(shù)據(jù)的基本語(yǔ)法:
import pandas as pd data = pd.read_html('file.html') # 從HTML文件讀取數(shù)據(jù) data = pd.read_html('http://example.com/table.html') # 從URL讀取數(shù)據(jù)
這個(gè)函數(shù)會(huì)返回一個(gè)包含所有HTML表格的列表。每個(gè)表格都被轉(zhuǎn)換為一個(gè)數(shù)據(jù)框,可以像處理其他數(shù)據(jù)框一樣進(jìn)行操作。
2.處理HTML數(shù)據(jù)
一旦我們將HTML數(shù)據(jù)讀取到Pandas中,我們就可以使用各種方法處理和分析數(shù)據(jù),下面是一些常見(jiàn)的操作。
- 查看數(shù)據(jù)
使用head()
方法可以查看數(shù)據(jù)的前幾行,默認(rèn)顯示前5行。
print(data[0].head()) # 查看第一個(gè)表格的前5行
- 數(shù)據(jù)清洗
HTML數(shù)據(jù)通常包含一些不需要的行或列,可以使用Pandas的數(shù)據(jù)清洗方法來(lái)刪除這些數(shù)據(jù)。
clean_data = data[0].dropna() # 刪除含有NaN值的行 clean_data = clean_data.drop(columns=['Unnamed: 0']) # 刪除指定列
- 數(shù)據(jù)轉(zhuǎn)換
有時(shí),HTML數(shù)據(jù)中的某些列可能被錯(cuò)誤地識(shí)別為字符串,可以使用Pandas的數(shù)據(jù)轉(zhuǎn)換方法將其轉(zhuǎn)換為正確的數(shù)據(jù)類(lèi)型。
clean_data['Price'] = clean_data['Price'].str.replace('$', '').astype(float) # 將價(jià)格列轉(zhuǎn)換為浮點(diǎn)數(shù)
- 數(shù)據(jù)分析
一旦數(shù)據(jù)清洗和轉(zhuǎn)換完成,就可以使用Pandas提供的各種方法進(jìn)行數(shù)據(jù)分析,比如計(jì)算平均值、中位數(shù)、標(biāo)準(zhǔn)差等統(tǒng)計(jì)指標(biāo)。
mean_price = clean_data['Price'].mean() # 計(jì)算價(jià)格的平均值 median_price = clean_data['Price'].median() # 計(jì)算價(jià)格的中位數(shù) std_price = clean_data['Price'].std() # 計(jì)算價(jià)格的標(biāo)準(zhǔn)差
3.實(shí)際應(yīng)用
下面將通過(guò)一個(gè)實(shí)際的例子來(lái)演示如何使用Pandas讀取和處理HTML數(shù)據(jù)。假設(shè)要分析一個(gè)網(wǎng)站上的證券數(shù)據(jù),網(wǎng)站上的數(shù)據(jù)以HTML表格的形式展示,可以使用Pandas讀取這些數(shù)據(jù),并進(jìn)行進(jìn)一步的分析。
首先,需要安裝Pandas庫(kù)??梢允褂靡韵旅顏?lái)安裝:
pip install pandas
然后,可以使用以下代碼來(lái)讀取HTML數(shù)據(jù):
import pandas as pd data = pd.read_html('http://example.com/stock.html')
接下來(lái)可以查看數(shù)據(jù)的前幾行,并進(jìn)行數(shù)據(jù)清洗和轉(zhuǎn)換:
clean_data = data[0].dropna() clean_data['Price'] = clean_data['Price'].str.replace('$', '').astype(float)
最后進(jìn)行數(shù)據(jù)分析,并輸出結(jié)果:
mean_price = clean_data['Price'].mean() median_price = clean_data['Price'].median() std_price = clean_data['Price'].std() print('平均價(jià)格:', mean_price) print('中位數(shù)價(jià)格:', median_price) print('價(jià)格標(biāo)準(zhǔn)差:', std_price)
通過(guò)這些步驟,可以輕松地讀取和分析HTML數(shù)據(jù),從而得到有關(guān)證券價(jià)格的統(tǒng)計(jì)指標(biāo)。
二、讀取JSON文件
JSON是一種常用的數(shù)據(jù)交換格式,Pandas提供了一個(gè)函數(shù)read_json(),可以直接從JSON文件或URL中讀取數(shù)據(jù)。下面是讀取JSON數(shù)據(jù)的基本語(yǔ)法:
import pandas as pd data = pd.read_json('file.json') # 從JSON文件讀取數(shù)據(jù) data = pd.read_json('http://example.com/data.json') # 從URL讀取數(shù)據(jù)
1.處理JSON數(shù)據(jù)
一旦將JSON數(shù)據(jù)讀取到Pandas中,就可以使用各種方法處理和分析數(shù)據(jù),下面是一些常見(jiàn)的操作。
- 查看數(shù)據(jù)
使用head()方法可以查看數(shù)據(jù)的前幾行,默認(rèn)顯示前5行。
print(data.head()) # 查看數(shù)據(jù)的前5行
- 數(shù)據(jù)清洗
在處理JSON數(shù)據(jù)時(shí),可能會(huì)遇到一些缺失值或異常值。Pandas提供了一些方法來(lái)處理這些情況。
清除缺失值:使用dropna()方法可以刪除包含缺失值的行或列。
data.dropna() # 刪除包含缺失值的行 data.dropna(axis=1) # 刪除包含缺失值的列
填充缺失值:使用fillna()方法可以將缺失值替換為指定的值。
data.fillna(0) # 將缺失值替換為0
- 數(shù)據(jù)轉(zhuǎn)換
Pandas提供了一些方法來(lái)轉(zhuǎn)換數(shù)據(jù)類(lèi)型,以及對(duì)數(shù)據(jù)進(jìn)行重塑和透視。
轉(zhuǎn)換數(shù)據(jù)類(lèi)型:使用astype()方法可以將一列數(shù)據(jù)轉(zhuǎn)換為指定的數(shù)據(jù)類(lèi)型。
data['column_name'].astype(int) # 將一列數(shù)據(jù)轉(zhuǎn)換為整數(shù)類(lèi)型
重塑數(shù)據(jù):使用pivot()方法可以將數(shù)據(jù)從長(zhǎng)格式轉(zhuǎn)換為寬格式。
data.pivot(index='column1', columns='column2', values='value') # 將數(shù)據(jù)從長(zhǎng)格式轉(zhuǎn)換為寬格式
- 數(shù)據(jù)分析
Pandas提供了豐富的方法來(lái)進(jìn)行數(shù)據(jù)分析,包括數(shù)據(jù)聚合、數(shù)據(jù)排序、數(shù)據(jù)統(tǒng)計(jì)等。
數(shù)據(jù)聚合:使用groupby()方法可以對(duì)數(shù)據(jù)進(jìn)行分組,并進(jìn)行聚合操作。
data.groupby('column').sum() # 按列進(jìn)行分組,并計(jì)算每組的總和
數(shù)據(jù)排序:使用sort_values()方法可以按指定的列對(duì)數(shù)據(jù)進(jìn)行排序。
data.sort_values('column') # 按列對(duì)數(shù)據(jù)進(jìn)行排序
數(shù)據(jù)統(tǒng)計(jì):使用describe()方法可以計(jì)算數(shù)據(jù)的統(tǒng)計(jì)指標(biāo),如平均值、中位數(shù)、標(biāo)準(zhǔn)差等。
data.describe() # 計(jì)算數(shù)據(jù)的統(tǒng)計(jì)指標(biāo)
2.輸出數(shù)據(jù)
在處理和分析數(shù)據(jù)之后,可以將結(jié)果保存為其他格式的文件,如CSV、Excel等。
保存為CSV文件:使用to_csv()方法可以將數(shù)據(jù)保存為CSV文件。
data.to_csv('output.csv') # 將數(shù)據(jù)保存為CSV文件
保存為Excel文件:使用to_excel()方法可以將數(shù)據(jù)保存為Excel文件。
data.to_excel('output.xlsx') # 將數(shù)據(jù)保存為Excel文件
補(bǔ):Pandas中讀取JSON文件時(shí)出現(xiàn)ValueError的解決方法
問(wèn)題描述
當(dāng)我們使用Pandas的read_json函數(shù)讀取JSON文件時(shí),有時(shí)會(huì)遇到如下的ValueError錯(cuò)誤:
ValueError: Trailing data
這個(gè)錯(cuò)誤的原因是讀取的JSON文件在最后面有一些額外的括號(hào)或分隔符等數(shù)據(jù)。
例如,在下面的JSON文件中,我們會(huì)發(fā)現(xiàn)最后多了一個(gè)逗號(hào):
{ "name": "John", "age": 30, "city": "New York", }
如果我們將該文件使用Pandas的read_json函數(shù)讀取,就會(huì)產(chǎn)生上述的ValueError錯(cuò)誤。
解決方法
1. 修改JSON文件
最簡(jiǎn)單的方法是修改JSON文件,將多余的逗號(hào)或括號(hào)刪除。對(duì)于大的JSON文件,可以使用專(zhuān)業(yè)的JSON編輯器進(jìn)行編輯。對(duì)于小的JSON文件,我們可以手動(dòng)將多余的逗號(hào)或括號(hào)刪除,并保存修改后的文件。
2. 設(shè)置read_json函數(shù)的參數(shù)
除了修改JSON文件,我們也可以通過(guò)設(shè)置read_json函數(shù)的參數(shù)來(lái)解決這個(gè)問(wèn)題。具體來(lái)說(shuō),我們需要使用以下兩個(gè)參數(shù):
- lines=True:將文件解析成多行模式,每行都是一個(gè)單獨(dú)的JSON對(duì)象。
- orient='records':將JSON對(duì)象轉(zhuǎn)換為記錄的列表形式。
例如,下面是一個(gè)使用這兩個(gè)參數(shù)解決問(wèn)題的示例:
import pandas as pd df = pd.read_json('file.json', lines=True, orient='records')
這里,我們將一個(gè)包含多個(gè)JSON對(duì)象的JSON文件讀取為一個(gè)DataFrame對(duì)象。如果想要將每個(gè)JSON對(duì)象都讀取為一個(gè)單獨(dú)的DataFrame對(duì)象,可以使用下面的方法:
import pandas as pd with open('file.json') as f: for line in f: df = pd.read_json(line, orient='records')
這個(gè)方法是逐行讀取JSON文件,并將每行解析為單獨(dú)的DataFrame對(duì)象。這樣可以避免多余的逗號(hào)或括號(hào)造成的ValueError錯(cuò)誤。
綜上所述,本文介紹了如何使用Pandas讀取和處理HTML、JSON數(shù)據(jù)。通過(guò)Pandas的函數(shù),可以輕松地從JSON文件或HTML中讀取數(shù)據(jù),并將其轉(zhuǎn)換為DataFrame,進(jìn)而使用Pandas提供的各種方法進(jìn)行數(shù)據(jù)清洗、轉(zhuǎn)換和分析。
到此這篇關(guān)于pandas讀取HTML和JSON數(shù)據(jù)的實(shí)現(xiàn)示例的文章就介紹到這了,更多相關(guān)pandas讀取HTML和JSON內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Python基于pandas實(shí)現(xiàn)json格式轉(zhuǎn)換成dataframe的方法
- 對(duì)pandas處理json數(shù)據(jù)的方法詳解
- Pandas讀存JSON數(shù)據(jù)操作示例詳解
- 讀Json文件生成pandas數(shù)據(jù)框詳情
- python使用pandas讀取json文件并進(jìn)行刷選導(dǎo)出xlsx文件的方法示例
- Pandas實(shí)現(xiàn)解析JSON數(shù)據(jù)與導(dǎo)出的示例詳解
- Python?Pandas實(shí)現(xiàn)將嵌套JSON數(shù)據(jù)轉(zhuǎn)換DataFrame
- Python使用pandas讀取Excel并選取列轉(zhuǎn)json
- Pandas JSON的處理使用
相關(guān)文章
Django和Flask框架優(yōu)缺點(diǎn)對(duì)比
這篇文章主要介紹了Django和Flask框架相關(guān)對(duì)比,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-10-10Python字符串函數(shù)strip()原理及用法詳解
這篇文章主要介紹了Python字符串函數(shù)strip()原理及用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python之wxPython應(yīng)用實(shí)例
這篇文章主要介紹了python之wxPython應(yīng)用實(shí)例,以加載圖片為例講述了wxPython的用法,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2014-09-09使用python如何實(shí)現(xiàn)泛型函數(shù)
這篇文章主要介紹了使用python如何實(shí)現(xiàn)泛型函數(shù),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-09-09python 3.74 運(yùn)行import numpy as np 報(bào)錯(cuò)lib\site-packages\numpy\_
這篇文章主要介紹了python 3.74 運(yùn)行import numpy as np 報(bào)錯(cuò)lib\site-packages\numpy\__init__.py,原來(lái)需要更新一下numpy即可2019-10-10django的autoreload機(jī)制實(shí)現(xiàn)
這篇文章主要介紹了django的autoreload機(jī)制實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06