利用pandas进行数据预处理

在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/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球