使用Python進行數(shù)據(jù)清洗與存儲的基本方法
1. 數(shù)據(jù)清洗的意義和作用
數(shù)據(jù)清洗指的是將爬取到的數(shù)據(jù)轉換為結構化、準確且一致的格式,去除無效數(shù)據(jù)、處理缺失值、規(guī)范化格式、解析數(shù)據(jù)等。無論是進一步的分析、模型訓練還是數(shù)據(jù)庫存儲,清洗后的數(shù)據(jù)都將更加高效和精準。
爬蟲獲取的數(shù)據(jù)常見問題:
- 數(shù)據(jù)缺失:某些字段可能為空或格式不一致。
- 噪音數(shù)據(jù):可能包含廣告、注釋等無用信息。
- 格式不規(guī)范:如日期格式、文本的編碼、大小寫不一致等。
在本文中,我們將使用一些示例代碼展示如何進行數(shù)據(jù)清洗和存儲。
2. 常用的數(shù)據(jù)清洗庫
Python 提供了多種庫用于數(shù)據(jù)清洗,其中最常用的有:
- Pandas:提供了靈活的數(shù)據(jù)操作功能,可用于數(shù)據(jù)的清洗、轉換和處理。
- re(正則表達式庫):用于字符串模式匹配和數(shù)據(jù)清理。
- BeautifulSoup:用于解析 HTML,清洗網(wǎng)頁數(shù)據(jù)。
- NumPy:用于處理數(shù)值數(shù)據(jù),補齊缺失值等。
安裝 Pandas 和 BeautifulSoup:
pip install pandas beautifulsoup4
3. 示例數(shù)據(jù)集
假設我們爬取了一個電商網(wǎng)站的商品信息,數(shù)據(jù)如下:
商品名稱 | 價格 | 評論數(shù) | 上架日期 |
---|---|---|---|
Apple iPhone 12 | $999 | 200 | 2023年1月1日 |
Samsung Galaxy S21 | 價格缺失 | 150 | 無 |
Xiaomi Mi 11 | $699 | 評論缺失 | 2023年3月5日 |
Sony Xperia 5 | $799 | 100 | 2023/05/10 |
OPPO Find X3 | 價格錯誤 | 50 | 2022-12-01 |
可以看到,爬取的數(shù)據(jù)包含以下問題:
- 某些價格和評論數(shù)缺失。
- 日期格式不一致。
- 某些價格字段格式不正確。
- “價格缺失”和“評論缺失”這樣的非標準信息,需要轉化為缺失值。
我們將基于這個數(shù)據(jù)集來演示清洗步驟。
4. 數(shù)據(jù)清洗步驟
4.1 將數(shù)據(jù)載入 Pandas DataFrame
將數(shù)據(jù)轉換為 Pandas 的 DataFrame 格式,便于操作。
import pandas as pd # 創(chuàng)建示例數(shù)據(jù) data = { '商品名稱': ['Apple iPhone 12', 'Samsung Galaxy S21', 'Xiaomi Mi 11', 'Sony Xperia 5', 'OPPO Find X3'], '價格': ['$999', '價格缺失', '$699', '$799', '價格錯誤'], '評論數(shù)': [200, 150, '評論缺失', 100, 50], '上架日期': ['2023年1月1日', '無', '2023年3月5日', '2023/05/10', '2022-12-01'] } df = pd.DataFrame(data) print(df)
輸出為:
商品名稱 價格 評論數(shù) 上架日期
0 Apple iPhone 12 $999 200 2023年1月1日
1 Samsung Galaxy S21 價格缺失 150 無
2 Xiaomi Mi 11 $699 評論缺失 2023年3月5日
3 Sony Xperia 5 $799 100 2023/05/10
4 OPPO Find X3 價格錯誤 50 2022-12-01
4.2 處理缺失值
缺失值可以通過刪除行或填充方式處理。先將“價格缺失”和“評論缺失”字段轉化為 Pandas 可識別的缺失值(NaN)。
import numpy as np # 將“價格缺失”、“評論缺失”轉化為 NaN df['價格'] = df['價格'].replace(['價格缺失', '價格錯誤'], np.nan) df['評論數(shù)'] = df['評論數(shù)'].replace('評論缺失', np.nan) print(df)
4.3 清洗價格字段
價格字段中包含 $
符號,并且類型為字符串。我們可以去除符號并將其轉換為數(shù)值類型,以便后續(xù)分析。
# 去除 $ 符號并轉換為浮點數(shù) df['價格'] = df['價格'].str.replace('$', '').astype(float) print(df)
4.4 處理日期格式
上架日期包含多種格式??梢允褂?nbsp;pd.to_datetime
函數(shù)進行格式統(tǒng)一化。
# 統(tǒng)一上架日期格式 df['上架日期'] = pd.to_datetime(df['上架日期'], errors='coerce') print(df)
在這里,我們使用 errors='coerce'
選項來處理格式不正確的日期,例如“無”,會將其轉換為缺失值。
4.5 填充缺失值
我們可以根據(jù)需求填充缺失值,例如將價格的缺失值替換為均值,或填入特定值。
# 用平均價格填充缺失值 df['價格'].fillna(df['價格'].mean(), inplace=True) # 填充評論數(shù)為 0 df['評論數(shù)'].fillna(0, inplace=True) print(df)
5. 數(shù)據(jù)存儲
完成清洗后,數(shù)據(jù)可以存儲到不同的文件格式中,方便后續(xù)分析和使用。常見的數(shù)據(jù)存儲格式包括 CSV、Excel、SQL 數(shù)據(jù)庫和 JSON。
5.1 保存為 CSV 文件
CSV 文件是數(shù)據(jù)存儲的常用格式,適合小規(guī)模數(shù)據(jù)。
df.to_csv('cleaned_data.csv', index=False)
5.2 保存為 Excel 文件
如果數(shù)據(jù)需要進一步操作或供人查看,Excel 格式是不錯的選擇。
df.to_excel('cleaned_data.xlsx', index=False)
5.3 保存到 SQL 數(shù)據(jù)庫
SQL 數(shù)據(jù)庫更適合大規(guī)模數(shù)據(jù),可以使用 SQLite、MySQL 等。以下是使用 SQLite 存儲數(shù)據(jù)的示例:
import sqlite3 # 連接 SQLite 數(shù)據(jù)庫(若文件不存在會自動創(chuàng)建) conn = sqlite3.connect('products.db') df.to_sql('products', conn, if_exists='replace', index=False) conn.close()
5.4 保存為 JSON 文件
JSON 文件常用于數(shù)據(jù)傳輸和存儲,適合嵌套結構的數(shù)據(jù)。
df.to_json('cleaned_data.json', orient='records', force_ascii=False)
6. 數(shù)據(jù)清洗與存儲的最佳實踐
- 格式統(tǒng)一:盡可能統(tǒng)一字段的格式,方便后續(xù)的處理和存儲。
- 處理缺失值:根據(jù)具體需求選擇合適的填充策略。
- 保留原始數(shù)據(jù):清洗過程中可保留一份原始數(shù)據(jù)副本,便于溯源。
- 數(shù)據(jù)量的選擇:小規(guī)模數(shù)據(jù)可以存儲為 CSV 或 Excel,大規(guī)模數(shù)據(jù)推薦存儲到數(shù)據(jù)庫。
- 數(shù)據(jù)驗證:清洗和存儲后,檢查數(shù)據(jù)的正確性,如統(tǒng)計均值、查看格式是否符合預期。
7. 小結
本文介紹了 Python 爬蟲數(shù)據(jù)的清洗與存儲方法,從處理缺失值、統(tǒng)一格式、清洗價格和日期等方面入手,并展示了如何將清洗后的數(shù)據(jù)保存為多種格式。通過掌握這些數(shù)據(jù)清洗和存儲技巧,可以大幅提升爬蟲數(shù)據(jù)的質量和可用性。
到此這篇關于使用Python進行數(shù)據(jù)清洗與存儲的基本方法的文章就介紹到這了,更多相關Python數(shù)據(jù)清洗與存儲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 如何使用Python數(shù)據(jù)清洗庫
- 使用python數(shù)據(jù)清洗代碼實例
- 用Python進行數(shù)據(jù)清洗以及值處理
- Python常用的數(shù)據(jù)清洗方法詳解
- 一文帶你深入了解Python中的數(shù)據(jù)清洗
- 三個Python常用的數(shù)據(jù)清洗處理方式總結
- Python數(shù)據(jù)清洗&預處理入門教程
- python?文件讀寫和數(shù)據(jù)清洗
- Python實現(xiàn)數(shù)據(jù)清洗的示例詳解
- python數(shù)據(jù)清洗中的時間格式化實現(xiàn)
- Python實現(xiàn)數(shù)據(jù)清洗的18種方法
相關文章
python3+PyQt5圖形項的自定義和交互 python3實現(xiàn)page Designer應用程序
這篇文章主要為大家詳細介紹了python3+PyQt5圖形項的自定義和交互,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04