Python 爬虫入门(四):使用 pandas 处理和分析数据 「详细介绍」

Python 爬虫入门(四):使用 pandas 处理和分析数据 「详细介绍」

  • 前言
    • [1. pandas简介](#1. pandas简介)
      • [1.1 什么是pandas?](#1.1 什么是pandas?)
      • [1.2 为什么要使用pandas?](#1.2 为什么要使用pandas?)
      • [1.3 安装 Pandas](#1.3 安装 Pandas)
    • [2. pandas的核心概念](#2. pandas的核心概念)
      • [2.1 Series](#2.1 Series)
      • [2.2 DataFrame](#2.2 DataFrame)
      • [2.3 索引](#2.3 索引)
    • [3. 数据导入和导出](#3. 数据导入和导出)
      • [3.1 从CSV文件读取数据](#3.1 从CSV文件读取数据)
      • [3.2 从Excel文件读取数据](#3.2 从Excel文件读取数据)
      • [3.3 导出数据到CSV](#3.3 导出数据到CSV)
      • [3.4 导出数据到Excel](#3.4 导出数据到Excel)
    • [4. 数据清洗](#4. 数据清洗)
      • [4.1 处理缺失值](#4.1 处理缺失值)
      • [4.2 删除重复数据](#4.2 删除重复数据)
      • [4.3 重命名列](#4.3 重命名列)
    • [5. 数据转换](#5. 数据转换)
      • [5.1 选择和过滤](#5.1 选择和过滤)
      • [5.2 排序](#5.2 排序)
      • [5.3 分组和聚合](#5.3 分组和聚合)
      • [5.4 合并数据](#5.4 合并数据)
    • [6. 时间序列操作](#6. 时间序列操作)
      • [6.1 创建日期范围](#6.1 创建日期范围)
      • [6.2 重采样](#6.2 重采样)
      • [6.3 移动窗口计算](#6.3 移动窗口计算)
    • [7. 数据可视化](#7. 数据可视化)
      • [7.1 绘制折线图](#7.1 绘制折线图)
      • [7.2 绘制柱状图](#7.2 绘制柱状图)
      • [7.3 绘制散点图](#7.3 绘制散点图)
    • [8. 高级功能](#8. 高级功能)
      • [8.1 多层索引](#8.1 多层索引)
      • [8.2 透视表](#8.2 透视表)
      • [8.3 类别数据](#8.3 类别数据)
    • [9. 性能优化](#9. 性能优化)
      • [9.1 使用适当的数据类型](#9.1 使用适当的数据类型)
      • [9.2 使用迭代器处理大数据集](#9.2 使用迭代器处理大数据集)
      • [9.3 使用内置的矢量化操作](#9.3 使用内置的矢量化操作)
    • [10. 实战案例:分析爬虫数据](#10. 实战案例:分析爬虫数据)
      • [10.1 导入数据](#10.1 导入数据)
      • [10.2 数据清洗](#10.2 数据清洗)
      • [10.3 数据分析](#10.3 数据分析)
      • [10.4 数据可视化](#10.4 数据可视化)
      • [10.5 导出结果](#10.5 导出结果)
    • [11. 注意事项和最佳实践](#11. 注意事项和最佳实践)
  • 总结

前言

  • 欢迎来到"Python 爬虫入门"系列的第四篇文章。在前面的教程中,我们学习了如何抓取网页数据。但是获取数据只是第一步,如何高效地处理和分析这些数据同样重要。这就是我们今天要学习的内容 - 使用pandas库进行数据处理。
  • pandas是Python中最强大的数据分析工具之一。它提供了高性能、易用的数据结构和数据分析工具。不管你是数据科学家、金融分析师,还是网络爬虫开发者,pandas都是一个不可或缺的工具。
  • 在这篇文章里,我们会深入探讨pandas的核心概念,学习如何使用pandas处理爬虫获取的数据,以及如何进行数据清洗、转换和分析。即使你是pandas新手,也不用担心,我们会从最基础的知识开始,一步步带你掌握pandas的使用技巧。

1. pandas简介

1.1 什么是pandas?

pandas是一个开源的,BSD许可的库,为Python编程语言提供高性能,易于使用的数据结构和数据分析工具。

pandas的名字来源于"panel data"(面板数据)的缩写,最初是为了处理金融数据而开发的。但是,由于其强大的功能和灵活性,它很快成为了各个领域数据分析的首选工具。

1.2 为什么要使用pandas?

pandas为数据处理提供了许多优势:

  1. 高效的数据结构: pandas提供了DataFrame和Series等数据结构,可以高效地处理大量数据。

  2. 数据清洗: pandas提供了丰富的工具来处理缺失数据、重复数据等常见问题。

  3. 数据转换: 可以轻松地重塑数据,进行聚合、合并等操作。

  4. 时间序列功能: 对于时间序列数据,pandas提供了专门的处理工具。

  5. 与其他库的集成: pandas可以很好地与NumPy、Matplotlib等其他科学计算库集成。

1.3 安装 Pandas

通过 pip 来安装:

bash 复制代码
pip install pandas

如果你使用的是 Anaconda 环境,Pandas 可能已经预装好了,如果没有,你也可以使用 conda 来安装:

bash 复制代码
conda install pandas

如果不确定是否已经安装了 Pandas 或者想要检查其版本,可以使用以下命令:

bash 复制代码
pip show pandas

2. pandas的核心概念

2.1 Series

Series是pandas中的一维标记数组,可以存储各种数据类型(整数、浮点数、字符串等)。

python 复制代码
import pandas as pd

# 创建一个Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)

输出:

2.2 DataFrame

DataFrame是一个二维标记数据结构,有列和索引。你可以把它看作是一个Excel表格或SQL表。

python 复制代码
# 创建一个DataFrame
df = pd.DataFrame({
    'A': [1, 2, 3, 4],
    'B': pd.Timestamp('20130102'),
    'C': pd.Series(1, index=list(range(4)), dtype='float32'),
    'D': np.array([3] * 4, dtype='int32'),
    'E': pd.Categorical(["test", "train", "test", "train"]),
    'F': 'foo'
})

print(df)

输出:

2.3 索引

索引是pandas中非常重要的概念。它允许你通过标签来访问数据,而不仅仅是通过位置。

python 复制代码
# 使用索引访问数据
print(df['A'])
print(df.loc[0])

3. 数据导入和导出

3.1 从CSV文件读取数据

python 复制代码
# 从CSV文件读取数据
df = pd.read_csv('data.csv')

3.2 从Excel文件读取数据

python 复制代码
# 从Excel文件读取数据
df = pd.read_excel('data.xlsx')

3.3 导出数据到CSV

python 复制代码
# 导出数据到CSV
df.to_csv('output.csv', index=False)

3.4 导出数据到Excel

python 复制代码
# 导出数据到Excel
df.to_excel('output.xlsx', index=False)

4. 数据清洗

4.1 处理缺失值

python 复制代码
# 删除包含缺失值的行
df.dropna()

# 填充缺失值
df.fillna(value=5)

4.2 删除重复数据

python 复制代码
# 删除重复行
df.drop_duplicates()

4.3 重命名列

python 复制代码
# 重命名列
df.rename(columns={'old_name': 'new_name'})

5. 数据转换

5.1 选择和过滤

python 复制代码
# 选择特定的列
df[['A', 'B']]

# 根据条件过滤行
df[df['A'] > 0]

5.2 排序

python 复制代码
# 按值排序
df.sort_values('B')

# 按索引排序
df.sort_index()

5.3 分组和聚合

python 复制代码
# 分组并计算平均值
df.groupby('A').mean()

5.4 合并数据

python 复制代码
# 合并两个DataFrame
pd.concat([df1, df2])

# 基于键合并
pd.merge(df1, df2, on='key')

6. 时间序列操作

6.1 创建日期范围

python 复制代码
# 创建日期范围
dates = pd.date_range('20130101', periods=6)

6.2 重采样

python 复制代码
# 将日数据重采样为月数据
df.resample('M').mean()

6.3 移动窗口计算

python 复制代码
# 计算移动平均
df['A'].rolling(window=3).mean()

7. 数据可视化

pandas与Matplotlib无缝集成,可以轻松创建各种图表。

7.1 绘制折线图

python 复制代码
df.plot(kind='line')

7.2 绘制柱状图

python 复制代码
df.plot(kind='bar')

7.3 绘制散点图

python 复制代码
df.plot(kind='scatter', x='A', y='B')

8. 高级功能

8.1 多层索引

多层索引允许你在一个轴上有多个索引级别。

python 复制代码
arrays = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'],
          ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']]
index = pd.MultiIndex.from_arrays(arrays, names=('first', 'second'))
df = pd.DataFrame(np.random.randn(8, 4), index=index, columns=['A', 'B', 'C', 'D'])
print(df)

8.2 透视表

透视表是一种汇总统计的方式,可以快速创建交叉表。

python 复制代码
df = pd.DataFrame({"A": ["foo", "foo", "foo", "bar", "bar", "bar"],
                   "B": ["one", "one", "two", "two", "one", "one"],
                   "C": ["x", "y", "x", "y", "x", "y"],
                   "D": [1, 3, 2, 5, 4, 1]})

table = pd.pivot_table(df, values='D', index=['A', 'B'], columns=['C'])
print(table)

8.3 类别数据

pandas提供了Categorical数据类型,用于处理类别变量。

python 复制代码
df = pd.DataFrame({"id":[1,2,3,4,5,6], "raw_grade":['a', 'b', 'b', 'a', 'a', 'e']})
df["grade"] = df["raw_grade"].astype("category")
print(df["grade"])

9. 性能优化

9.1 使用适当的数据类型

选择正确的数据类型可以显著提高性能和减少内存使用。

python 复制代码
df = pd.DataFrame({'a': np.random.randint(0, 100, 100000)})
df['b'] = df['a'].astype('int8')
print(df.memory_usage())

9.2 使用迭代器处理大数据集

对于非常大的数据集,可以使用迭代器来避免一次性将所有数据加载到内存。

python 复制代码
chunksize = 10000
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):
    # 处理每一个chunk
    process(chunk)

9.3 使用内置的矢量化操作

尽可能使用pandas的内置函数和方法,而不是Python的循环。

python 复制代码
# 不推荐
for i in range(len(df)):
    df.loc[i, 'new_col'] = df.loc[i, 'col1'] + df.loc[i, 'col2']

# 推荐
df['new_col'] = df['col1'] + df['col2']

10. 实战案例:分析爬虫数据

让我们用一个实际的例子来综合运用我们学到的知识。假设我们已经从一个电商网站爬取了一些产品数据,现在要对这些数据进行分析。

10.1 导入数据

python 复制代码
import pandas as pd
import matplotlib.pyplot as plt

# 假设我们的数据保存在products.csv文件中
df = pd.read_csv('products.csv')
print(df.head())

10.2 数据清洗

python 复制代码
# 删除缺失值
df.dropna(inplace=True)

# 将价格转换为数值类型
df['price'] = pd.to_numeric(df['price'].str.replace('$', ''), errors='coerce')

# 删除重复数据
df.drop_duplicates(inplace=True)

10.3 数据分析

python 复制代码
# 计算每个类别的平均价格
category_avg_price = df.groupby('category')['price'].mean().sort_values(ascending=False)
print(category_avg_price)

# 找出评分最高的10个产品
top_rated = df.nlargest(10, 'rating')
print(top_rated[['name', 'rating']])

# 计算价格和评分的相关性
correlation = df['price'].corr(df['rating'])
print(f"价格和评分的相关系数: {correlation}")

10.4 数据可视化

python 复制代码
# 绘制类别平均价格的条形图
plt.figure(figsize=(12,6))
category_avg_price.plot(kind='bar')
plt.title('Average Price by Category')
plt.xlabel('Category')
plt.ylabel('Average Price')
plt.xticks(rotation=45)
plt.tight_layout()
plt.show()

# 绘制价格和评分的散点图
plt.figure(figsize=(10,6))
plt.scatter(df['price'], df['rating'])
plt.title('Price vs Rating')
plt.xlabel('Price')
plt.ylabel('Rating')
plt.show()

10.5 导出结果

python 复制代码
# 将分析结果导出到Excel文件
with pd.ExcelWriter('analysis_results.xlsx') as writer:
    category_avg_price.to_excel(writer, sheet_name='Category Avg Price')
    top_rated[['name', 'rating']].to_excel(writer, sheet_name='Top Rated Products')

11. 注意事项和最佳实践

  1. 内存管理: 处理大数据集时要注意内存使用。使用chunksize参数分批读取数据,或者使用适当的数据类型来减少内存占用。

  2. 性能优化: 尽量使用向量化操作而不是循环,这样可以显著提高性能。

  3. 数据类型: 选择合适的数据类型可以提高性能并节省内存。例如,对于整数列,可以使用int8或int16而不是默认的int64。

  4. 索引: 合理使用索引可以提高查询和排序的性能。但是,过多的索引也会增加内存使用和数据修改的开销。

  5. 处理大文件: 对于非常大的文件,考虑使用迭代器或分块处理,而不是一次性将整个文件加载到内存中。

  6. 数据清洗: 在进行任何分析之前,一定要仔细检查和清洗数据。处理缺失值、异常值和重复数据是很重要的步骤。

  7. 文档和注释: 为你的代码添加清晰的注释和文档,这对于后续的维护和协作非常重要。

  8. 版本兼容性: 注意pandas的版本兼容性问题。某些函数和方法可能在不同版本中有所变化。

  9. 数据备份: 在对数据进行修改操作之前,最好先备份原始数据。

  10. 定期保存: 在处理大量数据或进行长时间运算时,定期保存中间结果是个好习惯。

总结

通过这篇文章的学习,相信你应该能够更深入地理解pandas的功能,并能够将其应用于自己的项目中,以提高数据处理和分析的效率和效果。

相关推荐
糖豆豆今天也要努力鸭2 分钟前
torch.__version__的torch版本和conda list的torch版本不一致
linux·pytorch·python·深度学习·conda·torch
何大春18 分钟前
【弱监督语义分割】Self-supervised Image-specific Prototype Exploration for WSSS 论文阅读
论文阅读·人工智能·python·深度学习·论文笔记·原型模式
在下不上天26 分钟前
Flume日志采集系统的部署,实现flume负载均衡,flume故障恢复
大数据·开发语言·python
SEVEN-YEARS30 分钟前
深入理解TensorFlow中的形状处理函数
人工智能·python·tensorflow
EterNity_TiMe_35 分钟前
【论文复现】(CLIP)文本也能和图像配对
python·学习·算法·性能优化·数据分析·clip
Suyuoa1 小时前
附录2-pytorch yolov5目标检测
python·深度学习·yolo
好看资源平台2 小时前
网络爬虫——综合实战项目:多平台房源信息采集与分析系统
爬虫·python
进击的六角龙2 小时前
深入浅出:使用Python调用API实现智能天气预报
开发语言·python
檀越剑指大厂2 小时前
【Python系列】浅析 Python 中的字典更新与应用场景
开发语言·python
湫ccc2 小时前
Python简介以及解释器安装(保姆级教学)
开发语言·python