pandas预处理原始数据 ---转换为---张量
目录
1.数据写入../data/house_tiny.csv的文件中
1.数据写入../data/house_tiny.csv的文件中
import os
import pandas as pd
# 创建文件目录
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
# 创建文件house_tiny.csv
data_file = os.path.join('..', 'data', 'house_tiny.csv')
# 添加数据集 NA代表数据未知的
with open(data_file, 'w') as f:
f.write("NumRooms,Alley,price\n") # 列名
f.write("NA,Pave,127500\n") # 数据样本
f.write("2,Pave,106000\n")
f.write("8,NA,178100\n")
f.write("NA,NA,140000\n")
2.数据读取
data = pd.read_csv(data_file) ''' NumRooms Alley price 0 NaN Pave 127500 1 2.0 NaN 106000 2 8.0 NaN 178100 3 NaN NaN 140000 '''
3.处理缺失数据
“NaN”项代表缺失值,常用方法是 插值法 和 丢弃法
举例 插值法
''' NumRooms Alley price 0 NaN Pave 127500 1 2.0 NaN 106000 2 8.0 NaN 178100 3 NaN NaN 140000 '''
通过iloc()把数据分成两块 inputs是前2列,outputs是后1列。inputs缺少的数值采用均值法
intputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2] # 数值域取均值mean() 插值fillna() intputs = intputs.fillna(intputs.mean(numeric_only=True))
NumRooms Alley 0 5.0 Pave 1 2.0 NaN 2 8.0 NaN 3 5.0 NaN 对于不是数值的数据 inputs的类别值 或 离散值 将 "NaN" 看成一个类别. 不同种类的数值 变成一个特征 Pave 和NaN 两类。
intputs = pd.get_dummies(intputs, dummy_na=True)
''' NumRooms Alley_Pave Alley_nan 0 5.0 1 0 1 2.0 0 1 2 8.0 0 1 3 5.0 0 1 '''
4.转换为张量
x = torch.tensor(intputs.values) y = torch.tensor(outputs.values)
x ''' tensor([[5., 1., 0.], [2., 1., 0.], [8., 0., 1.], [5., 0., 1.]], dtype=torch.float64) ''' y ''' tensor([127500, 106000, 178100, 140000]) '''