利用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')

这时候我们已经创建了…/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

2.处理缺失值

在上面我们进行了数据集的创建及读取工作,但是我们发现有些数据是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()) # 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) # 删除那些非缺失值个数小于2的,保留大于等于2的列

3.转化为张量格式

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]))

4.总结

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

  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xiuyvshu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值