赞
踩
在python的众多包中,pandas可以与张量兼容,因此我们在深度学习中一般运用pandas来进行数据的预处理,并将其转换成张量的形式。pandas进行数据预处理一般包括以下几个方面:
我们以一个具体的例子进行说明,假设我们创建一个数据集文件csv(逗号分割值)文件,并且写入一些数据,包含一个人的班级、名字和分数等信息
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'name_score.csv')
with open(data_file, 'w') as f:
f.write('Class,name,score\n') # 列名
f.write('NA,Tom,100\n') # 每行表示一个数据样本
f.write('2,NA,60\n')
f.write('4,NA,82\n')
f.write('NA,NA,76\n')
这时候我们已经创建了…/data/name_score.csv的文件,并写入了一些信息,接下来我们将其读取出来
import pandas as pd # 我们利用pandas中的read_csv函数操作
data = pd.read_csv(data_file)
print(data)
读取结果为
Class name score
0 NaN Tom 100
1 2.0 NaN 60
2 4.0 NaN 82
3 NaN NaN 76
在上面我们进行了数据集的创建及读取工作,但是我们发现有些数据是NaN,也就是所谓的缺失值,此时我们需要对缺失值进行处理。对缺失值的处理一般有两种方法,分别是插值法和删除法,操作的类型也主要有两种,一种是有具体数值的,另一种是类别值或离散值。
我们首先利用位置索引iloc将data分成两部分,其中第一二列成为inputs,分数的一列为outputs
inputs, outputs = data.iloc(:, 0:2), data(:, 2) # 注意我们是按列分的,因此前一个参数使用:来代表
# 我们将该列的行全部读取
接下来我们利用插值法对缺失的值进行补全,这里用到fillna()函数。
一般来说有具体数值的,我们补全的时候使用现有数值的平均数来补全。例如class的缺失值使用2跟4的平均值3来进行补全。
inputs = inputs.fillna(inputs.mean()) # mean()函数求平均值
print(inputs)
输出结果为
Class name
0 3.0 Tom
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
可以看到有具体数值的缺失值部分已经被补齐。
对于inputs中的类别值或离散值,我们将“NaN”视为一个类别。比如name列有"Tom"和“NaN”两个类别,pandas会自动将一列转化为两列,并且两列分别为“name_Tom”和"name_NaN"。并且转化为的两列中,每一行等于该列对应的类别的取1,否则取0。比如name_Tom列,只有第一行为1,其余行均为0。这里有点类似onehot编码,有兴趣的可以自己查阅,这里不赘述了。
这里用到get_dummies()函数,类似onehot编码。
inputs = pd.get_dummies(inputs, dummy_na=True)
print(inputs)
输出结果为
Class name_Tom name_nan
0 3.0 1 0
1 2.0 0 1
2 4.0 0 1
3 3.0 0 1
可以看到pandas自动将一列转化为两列。
inputs.dropna()
inputs.dropna(axis = 'columns')
inputs.dropna(axis = 'columns', how = 'all') # 删除全部是缺失值得列
inputs.dropna(axis = 'columns', thresh = 2) # 删除那些非缺失值个数小于2的,保留大于等于2的列
import torch
X, y = torch.tensor(inputs.value), torch.tensor(outputs.value)
X, y
输出为
(tensor([[3., 1., 0.],
[2., 0., 1.],
[4., 0., 1.],
[3., 0., 1.]], dtype=torch.float64),
tensor([100, 60, 82, 76]))
pandas可以与张量兼容,可以用来做深度学习的数据预处理,其中对于数据集中的缺失值,可以采用插值法或者删除法来进行操作。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。