在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
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()函数。
2.1有具体数值的插值法
一般来说有具体数值的,我们补全的时候使用现有数值的平均数来补全。例如class的缺失值使用2跟4的平均值3来进行补全。
inputs = inputs.fillna(inputs.mean())
print(inputs)
输出结果为
Class name
0 3.0 Tom
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN
可以看到有具体数值的缺失值部分已经被补齐。
2.2 类别值或离散值插值法
对于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自动将一列转化为两列。
2.3 删除法
- 删除法用到dropna()函数,默认是删除带有缺失值的整行
inputs.dropna()
- 若要删除带有缺失值得整列
inputs.dropna(axis = 'columns')
- 上面的操作是将整列(行)只要带缺失值就(any)删除,还可以设置只删除全部是缺失值的列(行)
inputs.dropna(axis = 'columns', how = 'all')
- 还可以利用thresh来设置阈值
inputs.dropna(axis = 'columns', thresh = 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可以与张量兼容,可以用来做深度学习的数据预处理,其中对于数据集中的缺失值,可以采用插值法或者删除法来进行操作。
Original: https://blog.csdn.net/dagongrenbs/article/details/124749847
Author: xiuyvshu
Title: 利用pandas进行数据预处理
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/622797/
转载文章受原作者版权保护。转载请注明原作者出处!