Pytorch+pandas--动手学深度学习--数据预处理(读取csv数据+NAN值处理+类别属性的处理)

读取csv文件

import pandas as pd

  1. data=pd.read_csv(file_name)
  2. 实现汉字扩展:data=pd.read_csv(file_name, encoding='gbk')
  3. 第一行不作为列名:data=pd.read_csv(file_name, header=None)
  4. 文件中某几行数据不读取:用readline的方式查找不希望读取的行数,再在统一读取进来的文件中删去特定行

数据预处理

包括NAN值处理、类别属性的处理。

NAN值处理

  1. 固定值填充NAN值:data=data.fillna(num)
  2. 均值、最大、最小值填充:data=data.fillna(data.mean()) 注意data.mean()只会对数值列进行运算,不会对字符列运算
  3. 去除有NAN值的行:data=data.dropna(axis=,subset=[colNames]) axis=0去除有NAN的行,axis=1去除有NAN的列

类别属性处理

  1. 类别之间存在大小关系:
#创建字典,标识每个类别的数值
label_value={'L':0, 'XL':1, 'XXL':2}
#mapper_class={label:idx for idx,label in enumerate(set(data['class label']))} 实现自动提取类别信息
#data['classes']=['L','L','XL','XXL']
data['classes']=data['classes'].map(label_value)

#输出为0,0,1,2
2. 类别之间不存在大小关系,则各个类别创建为一个特征,判断它是(1)还是不是(0),也就是形成了One-hot编码

data_dummies=pd.get_dummies(data, prefix=['color'], dummy_na=True)
#color列中有几种颜色就形成几个新列,并且NAN值也形成一列判断是否存在NAN值

例子

import pandas as pd
import torch
if __name__=="__main__":
    data=pd.DataFrame([['green', 'M', 10.1, 'class1'],
            ['red', 'L', 13.5, 'class2'],
            [None, 'XL', 15.3, 'class1'],
            [None, None, 15.3, 'class1']])
    data.columns=['color', 'size', 'prize', 'class label']#dataframe的创建
    mapper={'M':0,'L':1,'XL':2}#自定义字典mapper,用于类别转化
    data['size']=data['size'].map(mapper)
    mapper_class={label:idx for idx,label in enumerate(set(data['class label']))}#自动生成类别转化mapper
    data['class label']=data['class label'].map(mapper_class)#有大小关系的类别->值的转化
    data_dummies=pd.get_dummies(data,prefix=['color'],dummy_na=True)#对color列进行one-hot编码
    data_naNum=data.isna().sum()#判断dataframe中各个元素是否为NAN,判断每列是否有NAN需要加上.any(),判断整个dataframe是否有NAN加上.all()
    data_naNum=data_naNum.to_dict()#将Series->字典
    place=max(data_naNum,key=data_naNum.get)#找到字典中最大值的键
    data=data.fillna(data.mean())#用均值填充NAN,但非数值列不填充
    data=data.dropna(axis=0,subset=['size'])#删除特定列的NAN值行
    data=torch.tensor(data_dummies.values)#实现dataframe->tensor的转换
    print(data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值