您的位置:首页 > 游戏 > 游戏 > Python 爬虫入门(四):使用 pandas 处理和分析数据 「详细介绍」

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

2025/2/13 20:49:05 来源:https://blog.csdn.net/weixin_48321392/article/details/140792284  浏览:    关键词:Python 爬虫入门(四):使用 pandas 处理和分析数据 「详细介绍」

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

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

pip install pandas

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

conda install pandas

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

pip show pandas

2. pandas的核心概念

2.1 Series

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

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

输出:
在这里插入图片描述

2.2 DataFrame

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

# 创建一个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中非常重要的概念。它允许你通过标签来访问数据,而不仅仅是通过位置。

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

3. 数据导入和导出

3.1 从CSV文件读取数据

# 从CSV文件读取数据
df = pd.read_csv('data.csv')

3.2 从Excel文件读取数据

# 从Excel文件读取数据
df = pd.read_excel('data.xlsx')

3.3 导出数据到CSV

# 导出数据到CSV
df.to_csv('output.csv', index=False)

3.4 导出数据到Excel

# 导出数据到Excel
df.to_excel('output.xlsx', index=False)

4. 数据清洗

4.1 处理缺失值

# 删除包含缺失值的行
df.dropna()# 填充缺失值
df.fillna(value=5)

4.2 删除重复数据

# 删除重复行
df.drop_duplicates()

4.3 重命名列

# 重命名列
df.rename(columns={'old_name': 'new_name'})

5. 数据转换

5.1 选择和过滤

# 选择特定的列
df[['A', 'B']]# 根据条件过滤行
df[df['A'] > 0]

5.2 排序

# 按值排序
df.sort_values('B')# 按索引排序
df.sort_index()

5.3 分组和聚合

# 分组并计算平均值
df.groupby('A').mean()

5.4 合并数据

# 合并两个DataFrame
pd.concat([df1, df2])# 基于键合并
pd.merge(df1, df2, on='key')

6. 时间序列操作

6.1 创建日期范围

# 创建日期范围
dates = pd.date_range('20130101', periods=6)

6.2 重采样

# 将日数据重采样为月数据
df.resample('M').mean()

6.3 移动窗口计算

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

7. 数据可视化

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

7.1 绘制折线图

df.plot(kind='line')

7.2 绘制柱状图

df.plot(kind='bar')

7.3 绘制散点图

df.plot(kind='scatter', x='A', y='B')

8. 高级功能

8.1 多层索引

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

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 透视表

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

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数据类型,用于处理类别变量。

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 使用适当的数据类型

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

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

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

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

chunksize = 10000
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):# 处理每一个chunkprocess(chunk)

9.3 使用内置的矢量化操作

尽可能使用pandas的内置函数和方法,而不是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 导入数据

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

10.2 数据清洗

# 删除缺失值
df.dropna(inplace=True)# 将价格转换为数值类型
df['price'] = pd.to_numeric(df['price'].str.replace('$', ''), errors='coerce')# 删除重复数据
df.drop_duplicates(inplace=True)

10.3 数据分析

# 计算每个类别的平均价格
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 数据可视化

# 绘制类别平均价格的条形图
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 导出结果

# 将分析结果导出到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的功能,并能够将其应用于自己的项目中,以提高数据处理和分析的效率和效果。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com