当前位置:   article > 正文

利用pandas进行数据预处理_使用pandas进行数据预处理

使用pandas进行数据预处理

在python的众多包中,pandas可以与张量兼容,因此我们在深度学习中一般运用pandas来进行数据的预处理,并将其转换成张量的形式。pandas进行数据预处理一般包括以下几个方面:

  • 读取数据集
  • 处理缺失值
    • 有具体数值
    • 类别值或离散值
  • 转换成张量格式

1.读取数据集

我们以一个具体的例子进行说明,假设我们创建一个数据集文件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')
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

这时候我们已经创建了…/data/name_score.csv的文件,并写入了一些信息,接下来我们将其读取出来

import pandas as pd # 我们利用pandas中的read_csv函数操作

data = pd.read_csv(data_file)
print(data)
  • 1
  • 2
  • 3
  • 4

读取结果为

	Class name  score
0    NaN  Tom    100
1    2.0  NaN     60
2    4.0  NaN     82
3    NaN  NaN     76
  • 1
  • 2
  • 3
  • 4
  • 5

2.处理缺失值

在上面我们进行了数据集的创建及读取工作,但是我们发现有些数据是NaN,也就是所谓的缺失值,此时我们需要对缺失值进行处理。对缺失值的处理一般有两种方法,分别是插值法和删除法,操作的类型也主要有两种,一种是有具体数值的,另一种是类别值或离散值。
我们首先利用位置索引iloc将data分成两部分,其中第一二列成为inputs,分数的一列为outputs

inputs, outputs = data.iloc(:, 0:2), data(:, 2)  # 注意我们是按列分的,因此前一个参数使用:来代表
# 我们将该列的行全部读取
  • 1
  • 2

接下来我们利用插值法对缺失的值进行补全,这里用到fillna()函数。

2.1有具体数值的插值法

一般来说有具体数值的,我们补全的时候使用现有数值的平均数来补全。例如class的缺失值使用2跟4的平均值3来进行补全。

inputs = inputs.fillna(inputs.mean()) # mean()函数求平均值
print(inputs)
  • 1
  • 2

输出结果为

	Class name
0    3.0  Tom
1    2.0  NaN
2    4.0  NaN
3    3.0  NaN
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到有具体数值的缺失值部分已经被补齐。

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)
  • 1
  • 2

输出结果为

	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
  • 1
  • 2
  • 3
  • 4
  • 5

可以看到pandas自动将一列转化为两列。

2.3 删除法

  • 删除法用到dropna()函数,默认是删除带有缺失值的整行
inputs.dropna()
  • 1
  • 若要删除带有缺失值得整列
inputs.dropna(axis = 'columns')
  • 1
  • 上面的操作是将整列(行)只要带缺失值就(any)删除,还可以设置只删除全部是缺失值的列(行)
inputs.dropna(axis = 'columns', how = 'all')  # 删除全部是缺失值得列
  • 1
  • 还可以利用thresh来设置阈值
inputs.dropna(axis = 'columns', thresh = 2) # 删除那些非缺失值个数小于2的,保留大于等于2的列
  • 1

3.转化为张量格式

import torch

X, y = torch.tensor(inputs.value), torch.tensor(outputs.value)
X, y
  • 1
  • 2
  • 3
  • 4

输出为

(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([100,  60,  82,  76]))
  • 1
  • 2
  • 3
  • 4
  • 5

4.总结

pandas可以与张量兼容,可以用来做深度学习的数据预处理,其中对于数据集中的缺失值,可以采用插值法或者删除法来进行操作。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/148178
推荐阅读
相关标签
  

闽ICP备14008679号