我按照书上的代码运行结果报错,numpy版本是1.21.5,pandas版本是1.2.4,有大佬给我解答下吗?
inputs = data.iloc[:,:-1]
col_name = inputs.isna().sum().idxmax()
inputs = inputs.drop(columns=col_name)
torch.tensor(inputs.values)
def drop_col(data):
lst = ['NumRooms', 'Alley', 'Price']
count = 0
max_count = 0
max_col_name = ''
for col_name in lst:
count = data[col_name].isnull().sum() # 对应每一列中 nan 的数量
if count > max_count:
max_count = count
max_col_name = col_name
print(max_col_name)
data.drop(max_col_name, axis=1, inplace=True)
print(data)
if __name__ == "__main__":
data = pd.read_csv(data_file)
drop_col(data)
参考了佬的代码,发现应修正为
inputs = inputs.dropna(axis=1, thresh=max(inputs.isna().sum()) )
我只是个新手,尝试看了别的文档写了出来
import numpy as np
import pandas as pd
import torch
data = [[3,'NAN','NAN','NAN'],[11,22,33,'NAN'],[44,55,'NAN','NAN']]
mult = pd.DataFrame(data)
#DataFrame是一个表格类型的数据结构
#把不同的列表(或者是pandas库里头的Seise并成一个表格
print(mult)
boolmult = mult.isnull()
#这里为了直观可以构建一个布尔类型的DataFrame
print(boolmult)
missing_value = ['NAN']
mult.to_csv('2.2work.csv')
df = pd.read_csv('2.2word.csv' , na_values = missing_value)
#缺省值标记我们的特有的标签
new_df = df.dropna(axis = 1 , thresh = df.isnull().sum().max() )
#thresh标签的意思是,达到多少个缺省值我们才删除这个列(行)
#axis = 0 是删除行 反之则是删除列
i = new_df.iloc[:,0:2]
o = new_df.iloc[:,2]
#用iloc方法取单独的列 i 取前两列,o取第三列
x = torch.tensor(i.values) , y = torch.tensor(o.values)
#最后转化为张量
我也是这个报错,试了很多方法都不行,请问一下你解决了吗
一行代码搞定:
data.drop(data.isna().sum().idxmax(),axis=1)
用到的参数名及意义:
drop(labels,axis),labels表示行列名,axis,0表示行,1表示列
data.isna().sum(),列值和,这里返回series对象,其中series中的值为每列的和
idxmax()返回series中值最大的标签名,也就是列名。
是python版本的问题,我从3.10改3.9重新配置下环境解决了,可以试试
导包
import os
import pandas as pd
import torch
创建一个csv文件
os.makedirs(os.path.join("…",“data”),exist_ok= True)
data_file = os.path.join("…",“data”,“pandas_file.csv”)
with open(data_file,‘w’) as f:
f.write(‘A,B,C,D,Result\n’)
f.write(‘1,2,NA,NA,1\n’)
f.write(‘7,2,NA,P,1\n’)
f.write(‘3,9,3,P,1\n’)
f.write(‘2,9,NA,NA,1\n’)
读取文件
data = pd.read_csv(data_file)
定义一个删除最多空值的列函数
def deleteColumnMostNA(data):
max_index = max_count = -1
column = []
for i in range(data.shape[1]):
column.append(data.columns[i])
获取columns的信息
打印出data的column信息
for i in range(len(column)):
print(column[i])
计算出列的空信息的数量
for i in range(len(column)):
if data.isna().sum()[column[i]] > max_count:
max_index = i
max_count = data.isna().sum()[column[i]]
if max_index == -1:
return None
return data.drop(column[max_index],axis=1)
处理空值
data1 = deleteColumnMostNA(data)
inputs,outputs = data1.iloc[:,0:data1.shape[1]-1],data1.iloc[:,data1.shape[1]-1]
inputs = pd.get_dummies(inputs,dummy_na=True)
转化为tensor
X,y = torch.tensor(inputs.values),torch.tensor(outputs.values)
X,y
参考了佬们的代码
inputs = inputs.dropna(axis=1,thresh=max(inputs.isna().sum()) )
其中:
-
axis
参数指定了要删除哪个维度上包含缺失值的行或列。当axis=0
时表示按照行进行操作,即删除包含缺失值的整行;而当axis=1
时表示按照列进行操作,即删除包含缺失值的整列。 -
thresh
参数是一个阈值,它用来控制最多允许有多少个缺失值。如果某一行或列中的缺失值数量超过了这个阈值,则该行或列会被删除。注意,这里的缺失值数量是指在该行或列中有多少个缺失值,而不是在整个数据框中有多少个缺失值。
inputs.isna()
是 Pandas 数据框的一个方法,用来检查数据框中的每个元素是否为缺失值(NaN)。
inputs.isna().sum()
将返回一个新的数据框,其中包含了 inputs
数据框中每一列中缺失值的数量。具体而言,它的作用是:
- 对
inputs
调用isna()
方法,得到一个布尔型的数据框,其中每个元素表示该位置上是否为缺失值。 - 对该数据框调用
sum()
方法,对每一列求和,得到一个新的数据框,其中每一列的值表示原数据框中该列中缺失值的数量。