背景
动手学深度学习pytorch:2.2数据预处理练习后记
本来创建了缺失值的表格,后删除最大的缺失值列,且参考了discussion中的他人答案,很好的学习一些代码。
但是当出现多列缺失值都是最大的时候,该如何操作?
解决方案
首先展示去除缺失值最大的列(仅一列的)代码,默认data已创建好。
1.1 创建过程比较笨拙
import os
os.makedirs(os.path.join('..', 'data'), exist_ok=True)
data_file = os.path.join('..', 'data', 'house_large.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,Pavel,NA\n')
f.write('NA,NA,NA\n')
f.write('NA,Pavel,NA\n')
f.write('4,NA,NA\n')
f.write('NA,Pavee,106000\n')
f.write('4,NA,106000\n')
f.write('4,Paver,140000\n')
f.write('NA,NA,140000\n')
修改以上不同列na可以空值na数量。
1.2 读取并删除空值最多的列(仅一列)
import pandas as pd
data = pd.read_csv(data_file)
print(data)
# 知道每列的nan数
nan_numer = data.isnull().sum(axis=0)
# 找到nan_numer(series)中最大数的索引
nan_max_id = nan_numer.idxmax() #还是选择了第一次出现的num列 不过这个函数比较简洁,直接知道索引
#nan_numer.argmax()#列id索引
# 删除nan最大的列
data1 = data.drop([nan_max_id], axis=1)
data1
1.3 有多列存在相同数量(最多)的空值
nan_numer = data.isnull().sum(axis=0)
nan_max_ids = nan_numer[nan_numer == nan_numer.max()].index
data1 = data.drop(nan_max_ids, axis=1)
data1
该代码将id收集起来作为一个set(ids),一起去除。