动手学深度学习Pytorch 2.2.数据预处理-笔记

本文介绍了如何使用Python的pandas库对CSV数据进行预处理,包括处理缺失值(通过填充平均值或删除缺失值),并将Alley列转换为哑变量。最后,将处理后的数据转换为PyTorch张量格式以便于进一步的机器学习操作。
摘要由CSDN通过智能技术生成

使用pandas软件包预处理原始数据,它可以与张量兼容。

读取数据集

创建一个人工数据集,将数据集按行写入CSV(逗号分隔值)文件中。以其他格式存储的数据也可以通过类似的方式进行处理。

import os
# os.makedirs(os.path.join('..','data'),exist_ok=True)#创建../data目录
# data_file=os.path.join('..','data','house_tiny.csv')#创建../data/house_tiny.csv文件
os.makedirs(os.path.join('data'),exist_ok=True)#在当前文件夹创建data目录
data_file=os.path.join('data','house_tiny.csv')
with open(data_file,'w') as f:
    f.write('NumRooms,Alley,Price\n')#列名
    f.write('NA,Pave,127500\n')#每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')

Python的读写操作【Python杂项】with open() as f的用法_with open as f用法-CSDN博客

导入pandas包并调用read_csv函数,来从创建的CSV文件中加载原始数据集

# 如果没有安装pandas,只需取消对以下行的注释来安装pandas
# !pip install pandas
import pandas as pd

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

处理缺失值

“NaN”代表缺失值

处理缺失数据的典型方法包括插值法删除法

  • 插值法(fillna):用一个替代值弥补缺失值

用同一列的均值替换上文中的“NaN”项。

#通过索引iloc将data分为inputs(data的前两列)和outputs(最后一列)
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]

#编译器识别inputs.mean()为str,无法进行数值平均计算
inputs = inputs.fillna(inputs.mean()) 
​
print(inputs)

以上会报错 TypeError: can only concatenate str (not "int") to str,解决方法如下:

#解决方法1:先选择数据类型再进行求平均值
inputs = inputs.fillna(inputs.select_dtypes(include='number').mean())

#解决方法2:限制仅在数值类型为数值的列进行平均值插值
inputs = inputs.fillna(inputs.mean(numeric_only=True))

方法1来源动手学深度学习pytorch:27页inputs.fillna(inputs.mean())报错can only concatenate str (not “int“) to str_inputs = inputs.fillna(inputs.mean())报错-CSDN博客

方法2来源动手学深度学习pytorch:inputs.fillna(inputs.mean())报错can only concatenate str (not “int“) to str_inputs = inputs.fillna(inputs.mean())-CSDN博客

  • 删除法(dropna):直接忽略缺失值

inputs1 = inputs.dropna()#丢失缺失值,删除缺失值所在行(axis=0)或列(axis=1),默认为axis=0
inputs2 = inputs.dropna(axis=1)#删除所在列
print(inputs1)
print(inputs2)

在inputs中“Alley”列有“Pave”和“NaN”两个类别值,pandas可以调用get_dummies()自动将此列转换为两列“Alley_Pave”和“Alley_nan”。对应的类别值存在则设置为True,否则为False。

设置参数dummy_na=true(默认为False),使NaN被视为一个类别值。

#inputs=pd.get_dummies(inputs,dummy_na=True)#新拆分的两列默认输出bool值
inputs=pd.get_dummies(inputs,dummy_na=True,dtype=int)#指定输出类型为int,即输出0或1
print(inputs)

输出bool值:

输出0/1:

get_dummies()具体参数可查看pandas.get_dummies — pandas 2.2.1 文档 (pydata.org)

转换为张量格式

inputs和outputs中所有条目都是数值类型,可将它们转换为张量格式,便可以使用2.1节中的张量函数进行操作。

import torch
 ​
X=torch.tensor(inputs.to_numpy(dtype=float))
y=torch.tensor(outputs.to_numpy(dtype=float))
print(X)
print(y)
 ​
 #结果
 #tensor([[3., 1., 0.],
 #        [2., 0., 1.],
 #        [4., 0., 1.],
 #        [3., 0., 1.]], dtype=torch.float64)
 #tensor([127500., 106000., 178100., 140000.], dtype=torch.float64)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值