使用Python进行数据清洗与存储的基本方法
1. 数据清洗的意义和作用
数据清洗指的是将爬取到的数据转换为结构化、准确且一致的格式,去除无效数据、处理缺失值、规范化格式、解析数据等。无论是进一步的分析、模型训练还是数据库存储,清洗后的数据都将更加高效和精准。
爬虫获取的数据常见问题:
- 数据缺失:某些字段可能为空或格式不一致。
- 噪音数据:可能包含广告、注释等无用信息。
- 格式不规范:如日期格式、文本的编码、大小写不一致等。
在本文中,我们将使用一些示例代码展示如何进行数据清洗和存储。
2. 常用的数据清洗库
Python 提供了多种库用于数据清洗,其中最常用的有:
- Pandas:提供了灵活的数据操作功能,可用于数据的清洗、转换和处理。
- re(正则表达式库):用于字符串模式匹配和数据清理。
- BeautifulSoup:用于解析 HTML,清洗网页数据。
- NumPy:用于处理数值数据,补齐缺失值等。
安装 Pandas 和 BeautifulSoup:
pip install pandas beautifulsoup4
3. 示例数据集
假设我们爬取了一个电商网站的商品信息,数据如下:
商品名称 | 价格 | 评论数 | 上架日期 |
---|---|---|---|
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 |
可以看到,爬取的数据包含以下问题:
- 某些价格和评论数缺失。
- 日期格式不一致。
- 某些价格字段格式不正确。
- “价格缺失”和“评论缺失”这样的非标准信息,需要转化为缺失值。
我们将基于这个数据集来演示清洗步骤。
4. 数据清洗步骤
4.1 将数据载入 Pandas DataFrame
将数据转换为 Pandas 的 DataFrame 格式,便于操作。
import pandas as pd # 创建示例数据 data = { '商品名称': ['Apple iPhone 12', 'Samsung Galaxy S21', 'Xiaomi Mi 11', 'Sony Xperia 5', 'OPPO Find X3'], '价格': ['$999', '价格缺失', '$699', '$799', '价格错误'], '评论数': [200, 150, '评论缺失', 100, 50], '上架日期': ['2023年1月1日', '无', '2023年3月5日', '2023/05/10', '2022-12-01'] } df = pd.DataFrame(data) print(df)
输出为:
商品名称 价格 评论数 上架日期
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['评论数'] = df['评论数'].replace('评论缺失', np.nan) print(df)
4.3 清洗价格字段
价格字段中包含 $
符号,并且类型为字符串。我们可以去除符号并将其转换为数值类型,以便后续分析。
# 去除 $ 符号并转换为浮点数 df['价格'] = df['价格'].str.replace('$', '').astype(float) print(df)
4.4 处理日期格式
上架日期包含多种格式。可以使用 pd.to_datetime
函数进行格式统一化。
# 统一上架日期格式 df['上架日期'] = pd.to_datetime(df['上架日期'], errors='coerce') print(df)
在这里,我们使用 errors='coerce'
选项来处理格式不正确的日期,例如“无”,会将其转换为缺失值。
4.5 填充缺失值
我们可以根据需求填充缺失值,例如将价格的缺失值替换为均值,或填入特定值。
# 用平均价格填充缺失值 df['价格'].fillna(df['价格'].mean(), inplace=True) # 填充评论数为 0 df['评论数'].fillna(0, inplace=True) print(df)
5. 数据存储
完成清洗后,数据可以存储到不同的文件格式中,方便后续分析和使用。常见的数据存储格式包括 CSV、Excel、SQL 数据库和 JSON。
5.1 保存为 CSV 文件
CSV 文件是数据存储的常用格式,适合小规模数据。
df.to_csv('cleaned_data.csv', index=False)
5.2 保存为 Excel 文件
如果数据需要进一步操作或供人查看,Excel 格式是不错的选择。
df.to_excel('cleaned_data.xlsx', index=False)
5.3 保存到 SQL 数据库
SQL 数据库更适合大规模数据,可以使用 SQLite、MySQL 等。以下是使用 SQLite 存储数据的示例:
import sqlite3 # 连接 SQLite 数据库(若文件不存在会自动创建) conn = sqlite3.connect('products.db') df.to_sql('products', conn, if_exists='replace', index=False) conn.close()
5.4 保存为 JSON 文件
JSON 文件常用于数据传输和存储,适合嵌套结构的数据。
df.to_json('cleaned_data.json', orient='records', force_ascii=False)
6. 数据清洗与存储的最佳实践
- 格式统一:尽可能统一字段的格式,方便后续的处理和存储。
- 处理缺失值:根据具体需求选择合适的填充策略。
- 保留原始数据:清洗过程中可保留一份原始数据副本,便于溯源。
- 数据量的选择:小规模数据可以存储为 CSV 或 Excel,大规模数据推荐存储到数据库。
- 数据验证:清洗和存储后,检查数据的正确性,如统计均值、查看格式是否符合预期。
7. 小结
本文介绍了 Python 爬虫数据的清洗与存储方法,从处理缺失值、统一格式、清洗价格和日期等方面入手,并展示了如何将清洗后的数据保存为多种格式。通过掌握这些数据清洗和存储技巧,可以大幅提升爬虫数据的质量和可用性。
到此这篇关于使用Python进行数据清洗与存储的基本方法的文章就介绍到这了,更多相关Python数据清洗与存储内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
最新评论