数据预处理

你好,2.2.1的
inputs, outputs = data.iloc[:, 0:2], data.iloc[:, 2]
inputs = inputs.fillna(inputs.mean())
print(inputs)

这个代码块好像有两处错误,第一行的代码格式应该不对拆成两行可以在py上运行,然后第二行会报错字符串不能求均值改成了
inputs.iloc[:,0] = inputs.iloc[:,0].fillna(inputs.iloc[:,0].mean())
本人大学生转码新手如有误解请大佬指正 :grinning:

不对吧,[0:2]是第1列和第2列的意思

为什么我的张量是这个样子,是正常的吗

我也是这个问题,还没有解决,看样子应该是不能将字符和数字一起进行平均

解决了,粘贴别人的回答:inputs.mean() 更改为 inputs.mean(numeric_only=True)
表示仅处理数字部分,否则程序异常

第一题:
思路就是遍历每一列,统计NaN的数量,超过记录的最大值就更新记录,最后从dataframe中移除找到的NaN最多的列。注意这里取dataframe的头可以用dataframe.columns.to_list(),获得的是一个数组。

import os

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,Price\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')

row_count = len(data)
max_nan = 0
target_col_name = ""
for col_name in data.columns.to_list():
    cnt = data[col_name].count()
    if row_count - cnt > max_nan:
        max_nan = row_count - cnt
        target_col_name = col_name
data.drop(target_col_name, axis=1, inplace=True)
data

第二题:
思路就是先用插值法消除NaN的单元数据,再把dataframe转为numpy数组,再转torch.tensor。

import torch

data = data.fillna(data.mean())
data

# 转浮点数tensor
X = torch.tensor(data.to_numpy(dtype=float))
X

# 转整型tensor
Y = torch.tensor(data.to_numpy(dtype=int))
Y