首页 > 其他分享 >2.2 数据预处理

2.2 数据预处理

时间:2023-05-23 18:14:32浏览次数:37  
标签:False NA NaN data write True 2.2 数据 预处理

2.2.1 读取数据集

import os
import pandas as pd
import torch

创建一个人工数据集并存储在CSV文件../data/house_tiny.csv中。

调用 read_csv 函数读出该文件

os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_tiny.csv')
with open(data_file, 'w') as f:
    f.write('NumRooms,Alley,Prince\n') # 列名
    f.write('NA,Pave,127500\n') # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('NA,NA,140000\n')
data = pd.read_csv(data_file)
data
NumRooms Alley Prince
0 NaN Pave 127500
1 2.0 NaN 106000
2 4.0 NaN 178100
3 NaN NaN 140000

2.2.2 处理缺失值

通过位置索引 iloc 将 data 分成 inputs(前两列)和 outputs(后一列),并使用列均值替代 NaN 项。

inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
inputs
NumRooms Alley
0 3.0 Pave
1 2.0 NaN
2 4.0 NaN
3 3.0 NaN

将类型值或离散值的 NaN 视为一个类别,可将 Alley 列分解成 Alley_Pava 和 Alley_nan 两列。

inputs = pd.get_dummies(inputs, dummy_na=True)
inputs
NumRooms Alley_Pave Alley_nan
0 3.0 1 0
1 2.0 0 1
2 4.0 0 1
3 3.0 0 1

2.2.3 转换为张量格式

X, y = torch.tensor(inputs.values), torch.tensor(outputs.values)
X, y
(tensor([[3., 1., 0.],
         [2., 0., 1.],
         [4., 0., 1.],
         [3., 0., 1.]], dtype=torch.float64),
 tensor([127500, 106000, 178100, 140000]))

练习

# 整个更多数据的表
data_file2 = os.path.join('..', 'data', 'test_c2.csv')
with open(data_file2, 'w') as f:
    f.write('col0,col1,col2\n') # 列名
    f.write('1,Pave,127500\n') # 每行表示一个数据样本
    f.write('2,NA,106000\n')
    f.write('4,NA,178100\n')
    f.write('3,NA,NA\n')
    f.write('5,NA,140000\n')
    f.write('NA,NA,NA\n')
    f.write('9,NA,140000\n')
    f.write('7,NA,NA\n')
    f.write('9,NA,140000\n')
    f.write('3,NA,140000\n')

data = pd.read_csv(data_file2)
data
col0 col1 col2
0 1.0 Pave 127500.0
1 2.0 NaN 106000.0
2 4.0 NaN 178100.0
3 3.0 NaN NaN
4 5.0 NaN 140000.0
5 NaN NaN NaN
6 9.0 NaN 140000.0
7 7.0 NaN NaN
8 9.0 NaN 140000.0
9 3.0 NaN 140000.0

(1)删除缺失值最多的列

调用 isnull 函数判断哪些值为缺失值,再调用 sum 函数求和,最后调用 idxmax 获取其中的最大值列的索引

data.isnull(), data.isnull().sum(), data.isnull().sum().idxmax() # 得到缺失值最多列的索引

(    col0   col1   col2
 0  False  False  False
 1  False   True  False
 2  False   True  False
 3  False   True   True
 4  False   True  False
 5   True   True   True
 6  False   True  False
 7  False   True   True
 8  False   True  False
 9  False   True  False,
 col0    1
 col1    9
 col2    3
 dtype: int64,
 'col1')
data = data.drop(data.isnull().sum().idxmax(), axis=1) # 删除
data
col0 col2
0 1.0 127500.0
1 2.0 106000.0
2 4.0 178100.0
3 3.0 NaN
4 5.0 140000.0
5 NaN NaN
6 9.0 140000.0
7 7.0 NaN
8 9.0 140000.0
9 3.0 140000.0

(2)处理剩余缺失值后转换为张量格式

data = data.fillna(data.mean())
data
col0 col2
0 1.000000 127500.0
1 2.000000 106000.0
2 4.000000 178100.0
3 3.000000 138800.0
4 5.000000 140000.0
5 4.777778 138800.0
6 9.000000 140000.0
7 7.000000 138800.0
8 9.000000 140000.0
9 3.000000 140000.0
Y = torch.tensor(data.values)
Y
tensor([[1.0000e+00, 1.2750e+05],
        [2.0000e+00, 1.0600e+05],
        [4.0000e+00, 1.7810e+05],
        [3.0000e+00, 1.3880e+05],
        [5.0000e+00, 1.4000e+05],
        [4.7778e+00, 1.3880e+05],
        [9.0000e+00, 1.4000e+05],
        [7.0000e+00, 1.3880e+05],
        [9.0000e+00, 1.4000e+05],
        [3.0000e+00, 1.4000e+05]], dtype=torch.float64)

标签:False,NA,NaN,data,write,True,2.2,数据,预处理
From: https://www.cnblogs.com/AncilunKiang/p/17425991.html

相关文章

  • druid 数据库密码加密
    cmd命令:1、切换的druid-0.2.9.jar包所在目录2、在命令行中执行如下命令:java-cpdruid-0.2.9.jarcom.alibaba.druid.filter.config.ConfigToolsyou_password即输出加密后密码3、<!--sql统计功能就不能用<propertyname="filters"value="stat"/>--><propertyname="......
  • ReID专栏(一) 任务与数据集概述
    前言 本专栏针对Closed-world的ReID任务,首先介绍本任务的目标与主要数据集,包括行人重识别、跨模态行人重识别与车辆重识别。然后从三类表征学习的角度解读相关论文,表征学习是本任务的核心,大量重识别工作都致力于提高表征学习的性能。再次,我们介绍了度量学习和排序优化的发展。最......
  • MySQL数据库统计常用语句
    1、查看所有数据库容量大小selecttable_schemaas'数据库',sum(table_rows)as'记录数',sum(truncate(data_length/1024/1024,2))as'数据容量(MB)',sum(truncate(index_length/1024/1024,2))as'索引容量(MB)'frominformation_schema.tablesgro......
  • 大数据之元数据
    在成体系的大数据开发的工作中,离不开元数据管理、数据整合、数据治理、数据质量管控等等。本篇文章从元数据是什么,为什么要有元数据,元数据分类,元数据管理等方面谈谈元数据。目录元数据是什么为什么要有元数据以及元数据管理元数据分类元数据的应用元数据管理元数据是什么要理解......
  • 接口加密了该怎么测?接口中有数据要进行加密怎么做??
    对明文编码生成信息摘要,以防止被篡改。比如MD5使用的是Hash算法,无论多长的输入,MD5都会输出长度为128bits的一个串。摘要算法不要秘钥,客户端和服务端采用相同的摘要算法即可针对同一段明文获取一致的密文。对称加密对称加密算法是共享密钥加密算法,在加密解密过程中,使用的密钥只......
  • sqlserver 创建表时,为何会出现不支持该后端版本设计数据库关系图或表的提示?
    https://www.null123.com/question/detail-2236078.html同事遇到的问题,查了下记录下:由于使用了错误的SSMS版本(SqlServerManagementStudio),这通常被报告为错误。使用为您的数据库版本设计的版本。您可以使用命令select@@version检查您实际使用的sqlserver版本。此版本的报......
  • 1万多贺卡祝福节日祝福ACCESS\EXCEL数据库
    你是否在春节只能复制别人的祝福短信来发送?你是否在节日期间为给朋友送祝福无从下手?你是否在特殊日子和朋友打不开对话的开头?其实,很多情况下我们都需要一堆不同与别的人祝福语,用在节日上、用在交际上等日常备用。今天这一份数据就是祝福语大全,有节日、祝福两大类,子分类有50多个。......
  • 8百多经典古诗学习鉴赏ACCESS\EXCEL数据库
    虽然古诗类的数据搞到过很多,但是有鉴赏、译文等鉴赏类字段的还是很少,而今天搞到一个古诗学习类数据库,虽然记录数不多,但大都有翻译、鉴赏、译文等字段内容,是小学生、中学生、高中生学习的好东西。朝代统计:金朝(2)、两汉(22)、明代(25)、南北朝(24)、清代(27)、宋代(348)、唐代(373)、魏晋(19)、五......
  • rails 前后端数据传递hash to json
    controller.rb@data={a:1,b:2}@data_new={"a":1,"b":2}index.htmlvararr=<%=@data%>#=>{:a=>1,:b=>2}vararr=<%=raw@data%>#=>arr={:a=>1,:b=>2}vararr=<%=raw@data_......
  • 瀚高数据库按时间年份分组
    今天写业务的时候遇到一个需求:根据年份分组统计数量。使用的是瀚高数据库。听上去好像是小问题,但实际上却是有点困难的。因为数据库中存储的时间是默认到秒的,例如:2023-04-1100:00:00,如果我们直接使用groupbytime的话,就会以秒为基本单位进行分组,这显然不是我们想要的,所以我们要......