D2L-zh项目教程:使用Pandas进行数据预处理

D2L-zh项目教程:使用Pandas进行数据预处理

d2l-zh 《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。 d2l-zh 项目地址: https://gitcode.com/gh_mirrors/d2/d2l-zh

引言

在深度学习项目中,数据预处理是一个至关重要的环节。原始数据往往存在各种问题,如缺失值、格式不一致等,这些问题会直接影响模型的训练效果。本文将介绍如何使用Python中强大的pandas库进行数据预处理,为后续的深度学习模型训练做好准备。

什么是Pandas

Pandas是Python中最流行的数据分析库之一,它提供了高效的数据结构和数据分析工具。在深度学习中,我们经常需要将原始数据转换为适合模型处理的格式,pandas在这个过程中扮演着重要角色。

创建示例数据集

为了更好地理解数据预处理的过程,我们先创建一个简单的房屋数据集:

import os
import pandas as pd

# 创建数据目录和CSV文件
os.makedirs('data', exist_ok=True)
data_file = 'data/house_tiny.csv'

# 写入示例数据
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Price\n')  # 列名
    f.write('NA,Pave,127500\n')       # 样本1
    f.write('2,NA,106000\n')          # 样本2
    f.write('4,NA,178100\n')          # 样本3
    f.write('NA,NA,140000\n')         # 样本4

这个数据集包含三个特征:

  • NumRooms:房间数量(数值型)
  • Alley:巷子类型(类别型)
  • Price:房屋价格(目标变量)

读取数据

使用pandas读取CSV文件非常简单:

data = pd.read_csv(data_file)
print(data)

输出结果会显示我们的数据集,其中"NA"表示缺失值。

处理缺失值

缺失值是现实数据中常见的问题,pandas提供了多种处理方式:

1. 数值型缺失值处理

对于数值型特征(如NumRooms),我们可以使用均值填充:

inputs = data.iloc[:, 0:2]  # 获取前两列作为输入
outputs = data.iloc[:, 2]   # 获取最后一列作为输出

# 用均值填充数值型缺失值
inputs['NumRooms'] = inputs['NumRooms'].fillna(inputs['NumRooms'].mean())

2. 类别型缺失值处理

对于类别型特征(如Alley),我们可以将缺失值视为一个独立的类别:

inputs = pd.get_dummies(inputs, dummy_na=True)

这种方法会为每个类别(包括缺失值)创建新的二进制列,这种转换称为"独热编码"。

转换为张量格式

深度学习框架通常需要数据以张量形式输入。我们可以将处理好的pandas数据转换为张量:

PyTorch版本

import torch

X = torch.tensor(inputs.to_numpy(dtype=float))
y = torch.tensor(outputs.to_numpy(dtype=float))

TensorFlow版本

import tensorflow as tf

X = tf.constant(inputs.to_numpy(dtype=float))
y = tf.constant(outputs.to_numpy(dtype=float))

实际应用建议

  1. 大型数据集处理:对于大型数据集,建议使用pandas的chunksize参数分块读取
  2. 内存优化:可以使用astype()方法转换数据类型以减少内存占用
  3. 类别特征处理:对于高基数类别特征,考虑使用嵌入或目标编码而非独热编码
  4. 数据泄露:确保在训练集上计算的统计量(如均值)不包含测试集信息

总结

本文介绍了使用pandas进行数据预处理的基本流程,包括:

  • 创建和读取数据集
  • 处理数值型和类别型缺失值
  • 将数据转换为张量格式

这些步骤是深度学习项目数据准备的基础环节。掌握这些技能后,你可以处理更复杂的数据集,为模型训练打下坚实基础。

练习

  1. 扩展数据集,增加更多特征和样本
  2. 尝试不同的缺失值处理策略(如中位数填充、删除法等)
  3. 探索pandas的其他数据转换功能(如标准化、归一化等)

通过实践这些练习,你将更深入地理解数据预处理在深度学习中的重要性。

d2l-zh 《动手学深度学习》:面向中文读者、能运行、可讨论。中英文版被70多个国家的500多所大学用于教学。 d2l-zh 项目地址: https://gitcode.com/gh_mirrors/d2/d2l-zh

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陆欣瑶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值